`
chenchuangfeng
  • 浏览: 79441 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Xml解析之----Pull

阅读更多

解析Xml有三种方式可选,sax ,dom ,pull   Domandroid上性能不是很少,在android上首选saxpull

       前段时间写了个Android天气预报的Demo,涉及到了pull解析Xmlpull的解析算是比较简单易用,

下面总结一下自己用pull解析xml的学习经验。

         附上天气预报deme代码:

http://www.eoeandroid.com/forum.php?mod=viewthread&tid=248543&page=1&extra=#pid2291325

         获取省份信息:

         http://www.webxml.com.cn/WebServices/WeatherWebService.asmx/getSupportProvince?

         通过上面这个地址,我们可以用HttpGet去可以获取到省份Xml文本内容,获取到Xml文本步骤就省略了,

得到Xml内容如下:
        
<ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://WebXml.com.cn/">

<string>直辖市</string>

<string>特别行政区</string>

<string>黑龙江</string>

<string>吉林</string>

<string>辽宁</string>

<string>内蒙古</string>

<string>河北</string>

<string>河南</string>

<string>山东</string>

<string>山西</string>

<string>江苏</string>

<string>安徽</string>

<string>陕西</string>

<string>宁夏</string>

<string>甘肃</string>

<string>青海</string>

</ArrayOfString>

        

         1.首先用到XmL的 静态方法去获取一个解析器XmlPullParser实例:

 

XmlPullParser xmlPullParser = Xml.newPullParser();

       

          2.设置输入流

 

xmlPullParser.setInput(inStream, "UTF-8");

 

          这里的输入流inStream就是获取的Xml文件的输入流。

 

         3,获取事件类型

 

 int eventCode = xmlPullParser.getEventType();

            这里的事件类型一共有以下几种比较常用到:

 

            XmlPullParser.START_DOCUMENT// 文档开始

            XmlPullParser.START_TAG// 标签开始.

            XmlPullParser.END_TAG// 标签结束

            XmlPullParser.END_DOCUMENT// 文档结束

 

 

 

          逻辑思路:

利用While语句,对文档进行遍历,每个While中,用switch去判断事件类型,进行相应处理,处理中利用

 

String name = xmlPullParser.getName();

 判断标签的详细类型,再进行更详细的处理,每次循环结束用下面语句把游标移动到下一个标签上,进行下次while循环

 

 

eventCode = xmlPullParser.next();

 直到

 

 

eventCode = XmlPullParser.END_DOCUMENT

 表明文档已经结束,则解析完成。

 

 

具体代码:

  

 public static ArrayList<String> getProvince(InputStream inStream,
	    int type) {
	ArrayList<String> data = new ArrayList<String>();
	XmlPullParser xmlPullParser = Xml.newPullParser();
	try {
	    xmlPullParser.setInput(inStream, "UTF-8");
	    int eventCode = xmlPullParser.getEventType();
	    while (eventCode != XmlPullParser.END_DOCUMENT) {
		String name = xmlPullParser.getName();
		switch (eventCode) {
		case XmlPullParser.START_DOCUMENT:// 文档开始

		    break;
		case XmlPullParser.START_TAG:// 元素开始.
		    if (name.equalsIgnoreCase("string")) {
			if(type ==2) data.add(xmlPullParser.nextText() .split("\\(")[0].trim().toString());
			else {
			    data.add(xmlPullParser.nextText() );
			}
		    }
		    break;
		case XmlPullParser.END_TAG:// 元素结束

		    break;
		case XmlPullParser.END_DOCUMENT:// 文档结束

		    break;

		default:
		    break;
		}
		eventCode = xmlPullParser.next();
	    }
	} catch (XmlPullParserException e) {
	    // TODO Auto-generated catch block
	    e.printStackTrace();
	} catch (IOException e) {
	    // TODO Auto-generated catch block
	    e.printStackTrace();
	}

 

 

 

1
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics