`

DOM方式解析xml文件1(解析网路xml)

阅读更多
其实网上很多资料讲关于解析xml的问题,大多数我都看的一知半解,今天终于找了个不错的例子,放在这里跟大家共享:
先上代码:
1.DomParseXml.java文件
package cn.com;

import java.io.File;
import java.io.InputStreamReader;
import java.net.URL;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;

public class DomParseXml extends Activity implements OnClickListener {

	File fl;

        //这个地址返回的内容的xml文件我下面会贴上
        //大家可以先跳过这个java文件看下xml文件结构
	private final String net = "http://www.google.com/ig/api?hl=zh-cn&weather=";

	private String addr;

	ListView lv;

	ArrayAdapter<String> adapter;

	private EditText et;

	@Override
	public void onCreate(Bundle savedInstanceState) {

		super.onCreate(savedInstanceState);

		setContentView(R.layout.main);

		Button bt = (Button) findViewById(R.id.bt);

		bt.setOnClickListener(this);
                //输入一个城市(wuhan或beijing等)
		et = (EditText) findViewById(R.id.et);

	}

	@Override
	public void onClick(View agr0) {

		// TODO Auto-generated method stub

		addr = et.getText().toString();

		switch (agr0.getId()) {

		case R.id.bt:
			// 获取输入的内容,取出空格
			if (!addr.trim().equals("")) {

				addr = net + addr;
				// System.out.println(addr);

				String[] data = null;
				// 将weather设置为根节点
				// Node nRoot = root(addr,"weather").item(0);
                                // 这里返回的是一个NodeList
				Node nRoot = root(addr, "forecast_information").item(0);
				// 获得孩子结点
				NodeList child = nRoot.getChildNodes();
				// 获得子节点的个数 7
				int childSize = child.getLength();
				System.out.println("**********childSize************"
						+ childSize);

				data = new String[childSize];

				for (int i = 0; i < childSize; i++) {
					// 第一个子节点,city
					Node nChild = child.item(i);
					// 获得子节点
					if (nChild.hasAttributes()) {
						// 获得节点属性
						data[i] = nChild.getAttributes().getNamedItem("data")
								.getNodeValue();
						System.out.println("**********************" + data[i]);

					}
				}
			}
			setTitle(et.getText().toString()); // 显示查询的城市
			break;
		}
	}

	private NodeList root(final String url, final String str) {

		NodeList root = null;

		try {

			InputSource is = new InputSource(new InputStreamReader(new URL(url)
					.openStream()));

			DocumentBuilderFactory factory = DocumentBuilderFactory
					.newInstance();

			DocumentBuilder dom = factory.newDocumentBuilder();

			Document doc = dom.parse(is);

			root = doc.getElementsByTagName(str);

		} catch (Exception e) {

			e.printStackTrace();

		}

		return root;

	}

}


2.main.xml文件内容:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="vertical" android:layout_width="fill_parent"
	android:layout_height="fill_parent">
	<TextView android:layout_width="fill_parent"
		android:layout_height="wrap_content" android:text="@string/hello" />
	<EditText android:text="" android:id="@+id/et"
		android:layout_width="150dp" android:layout_height="wrap_content"></EditText>
	<Button android:text="button" android:id="@+id/bt"
		android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
</LinearLayout>


3.每次都强调下的一条:
<uses-permission android:name="android.permission.INTERNET">
	</uses-permission>

另外我经常遇到在启动模拟器的时候那个模拟器连不上互联网,那个右上角的信号图标是个叉,我也不知道怎么修改,重新启动了下模拟器后就又可以联网了.不知道是什么原因,我们这种联网的应用如果在测试的时候没有注意到这的话,程序就会报错,说:
can't reach the host之类的,哪位兄弟姐妹知道是什么原因的话,麻烦告知一下,谢谢
另外附上查询到的xml文件:
<?xml version="1.0" ?> 
- <xml_api_reply version="1">
- <weather module_id="0" tab_id="0" mobile_row="0" mobile_zipped="1" row="0" section="0">
- <forecast_information>
  <city data="Beijing, Beijing" /> 
  <postal_code data="beijing" /> 
  <latitude_e6 data="" /> 
  <longitude_e6 data="" /> 
  <forecast_date data="2010-07-01" /> 
  <current_date_time data="2010-07-02 00:00:00 +0000" /> 
  <unit_system data="SI" /> 
  </forecast_information>
- <current_conditions>
  <condition data="晴" /> 
  <temp_f data="73" /> 
  <temp_c data="23" /> 
  <humidity data="湿度: 83%" /> 
  <icon data="/ig/images/weather/sunny.gif" /> 
  <wind_condition data="风向: 北、风速:4 米/秒" /> 
  </current_conditions>
- <forecast_conditions>
  <day_of_week data="周四" /> 
  <low data="21" /> 
  <high data="33" /> 
  <icon data="/ig/images/weather/chance_of_rain.gif" /> 
  <condition data="可能有雨" /> 
  </forecast_conditions>
- <forecast_conditions>
  <day_of_week data="周五" /> 
  <low data="22" /> 
  <high data="33" /> 
  <icon data="/ig/images/weather/sunny.gif" /> 
  <condition data="晴" /> 
  </forecast_conditions>
- <forecast_conditions>
  <day_of_week data="周六" /> 
  <low data="24" /> 
  <high data="33" /> 
  <icon data="/ig/images/weather/mostly_sunny.gif" /> 
  <condition data="以晴为主" /> 
  </forecast_conditions>
- <forecast_conditions>
  <day_of_week data="周日" /> 
  <low data="21" /> 
  <high data="35" /> 
  <icon data="/ig/images/weather/mostly_sunny.gif" /> 
  <condition data="晴间多云" /> 
  </forecast_conditions>
  </weather>
  </xml_api_reply>
分享到:
评论

相关推荐

    android 三种方式解析XML(DOM,Pull,Sax) 带文件编码识别

    三种方式解析XML 提供创建XML方法 本地三种方式解析 网络三种方式解析 一共7个 需要的下 带文件编码识别 相当强大哦

    ios-XML的DOM解析方式.zip

    XML的DOM解析方式 解析环球新闻的rss格式新闻

    android xml解析1

    在JAVA中有两种常见的XML解析方式,DOM和SAX,DOM在解析的时候会将所有的数据一次性载入内存中进行解析,在数据量比较大的情况下,效率非常低.尤其在手机这种对内存和性能要求比较苛刻的设备里面这种方法并不可取. ...

    解析XML的三种方式

    XML(Extensible Markup Language)可拓展标记语言,它与HTML一样,都是SGML...在Android下有三种方式解析XML,分别为SAX、DOM、PULL;它们有各自的特点,在网络编程中会经常使用,根据实际情况选择哪一种解析方式。

    DOM4J解析XML时DTD路径问题

    使用dom4j解析含有这样dtd的xml文件时,它会从网络找到这个文件对xml文件进行校验。但是如果电脑断开网络的话就会出现错误说找不到dtd文件并解析失败。所以请使用以下方法...

    android解析XML

    里面包含三种android解析XML方式:使用DOM解析本地XML,使用SAX解析网络XML文件,使用PULL解析网络XML。文档中附解析XML文件,解析源码,解析XML应注意问题。其中SAX,PULL是万能助手类(只需要有对应的XML源,给XML...

    dom4j解析XML(学习笔记)

    dom4j 被广泛的应用到xml解析上。这里给出部分网络资源

    android下载文件,xml,解析,解压,存储等

    android从网上下载各类文件,解压缩文件,从网络上或者SD卡读取xml并用dom4j解析,把网络上的xml存入SD卡。 给新手看的。注释已经很详细了。使用的时候注意把下载路径,SD卡存储路径,SD卡上的文件读取路径等自己...

    简单易用的C++解析xml类

    RapidXml 试图成为最快的 XML DOM 解析工具包,同时保证解析结果的可用性、可移植性以及与 W3C 标准的兼容性。RapidXml 使用 C++ 编写,因此在操作同一数据时,其解析速度接近于 strlen() 函数。 整个解析工具包包含...

    生成+解析XML

    根据网络视频自己写的的代码,包括DOM、SAX、JDOM、DOM4J四种解析+生成XML文档代码,思维导图

    iOS开发使用XML解析网络数据

    DOM:一次性将整个XML数据加载进内存进行解析,比较适合解析小文件SAX:从根元素开始,按顺序一个元素一个元素往下解析,比较适合解析大文件 2、IOS中XML解析方案有很多种:  2-1、第三方框架:  libxml2:纯C语言...

    XML技术上传文件

    本文讲解了一个使用XML技术上传文件的例子,使用该方法没有传统方法中的种种限制。 这个例子讲述了如何使用MSXML3.0和ADO Stream对象来实现这种新的上传方法。该方法只能使用于内部网络,因为它需要IE5的安全级别...

    XML的四种解析器原理及性能比较

    JDOM 和 DOM 在性能测试时表现不佳,在测试 10M 文档时内存溢出。在小文档情况下还值得考虑使用 DOM 和 JDOM。虽然 JDOM 的开发者已经说明他们期望... SAX表现较好,这要依赖于它特定的解析方式。无疑,DOM4J是最好的。

    XML 解析器(非Dom)

    一个XML 解析器,功能一般但是非常实用

    XML轻松学习手册--XML肯定是未来的发展趋势,不论是网页设计师还是网络程序员,都应该及时学习和了解

    XML越来越热,关于XML的基础教程网络上也随处可见。可是一大堆的概念和术语往往让人望而生畏,很多朋友问我:XML到底有什么用,我们是否需要学习它?我想就我个人学习过程的心得和经验,写一篇比较全面的介绍文章。...

    Tinyxml 源代码(VC6 & VS2005)

    简单地说,TinyXML解析一个XML文档并由此生成一个可读可修改可保存的文档对象模型(DOM)。 XML的意思是“可扩展标记语言“(eXtensible Markup Language)。它允许你创建你自己的文档标记。在为浏览器标记文档...

    XML高级编程pdf

    第1章 XML简介 1.1 标记语言 1.2 XML的起源和目的 1.3 Web体系结构:过去与未来 1.3.1 传统Web体系结构 1.3.2 XML下的Web体系结构 1.4 XML基本特征 1.5 词汇表 1.5.1 科学词汇表 1.5.2 商业词汇表 1.5.3 ...

    基于Java的XML解析与反射设计模式.doc

    这对于处理大型xml来 说是个巨大的优点,事实上,程序甚至不必解析整个文档,它可以在某个条件得到满足 时停止解析,这种读取方式比xstream与dom都要快上许多。所以在读取大型xml时可以把 xstream与saxparser结合...

    Java and XML, 3rd Edition

    它将教您如何使用XML的各种应用程序编程接口(API)、工具和技巧来构建实际的应用程序,为管理从配置文件到网络站点在内的所有信息提供一条全新的途径。 本书的前两章回顾有关XML的基础知识,包括XPath、XSL、DTD...

    XML 高级编程(高清版)

    第1章 XML简介 1.1 标记语言 1.2 XML的起源和目的 1.3 Web体系结构:过去与未来 1.3.1 传统Web体系结构 1.3.2 XML下的Web体系结构 1.4 XML基本特征 1.5 词汇表 1.5.1 科学词汇表 1.5.2 商业词汇表 1.5.3 ...

Global site tag (gtag.js) - Google Analytics