解析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内容如下:
<ArrayOfStringxmlns: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. 【阿里云镜像】切换阿里巴巴开源镜像站镜像——Debian镜像
  2. Android类库常用类型解析
  3. ListView setOnItemClickListener无效原因详细分析
  4. android 从相册中获取图片设置成头像的问题:
  5. Android(安卓)Configuration属性解析
  6. Android(安卓)TabHost学习笔记
  7. [置顶] Android:Android面试准备一
  8. android的PowerManager和PowerManager.WakeLock
  9. Android消息处理机制——AsyncTask 源码解析

随机推荐

  1. android textview 自动链接网址 修改默认
  2. android RatingBar自定义图片
  3. Android(安卓)Studio 配置SVN报错解决
  4. egret 打包android app 时 js 错误
  5. Android调用系统摄像头拍照并剪裁压缩
  6. Android修改Gallery页面布局
  7. Android开发之与服务器(jsp)发送、接受JSON
  8. 【Android(安卓)系统开发】 Android(安卓
  9. Android——4.2.2 文件系统文件夹分析
  10. 关于handler