xml在开发中的作用不可小觑,很多时候我们都要用到这种文件,所以学习它的解析方式很是必要。

我们都知道java中xml的解析有:dom,SAX,但是Android下我们使用pool解析,是更为方便,而且有专门的api可以使用。

  dom:一次加载到内存,生成一个树状结构,消耗的内存较大
  SAX:基于事件,速度快,效率高,不能回退。

1,首先我们需要定义出来解析器,它的定义方式,是通过Xml new出来的,这点要记着。

XmlPullParser parser = Xml.newPullParser();

2,然后我们需要,设置xml的文件源,也即初始化解析器,使用的方法如下,同时我们还要设置起编码格式,xml的编码一般为"utf-8",所以第二个参数我们就写成"utf-8",而第一个参数的话,如果我们的xml放在本地的话,我们可以通过类加载器来得到,且其返回类型就是inputstream。

parser.setInput(InputStream inputStream, String inputEncoding)

类加载器得到文件的位置,并返回inputstream。

MainActivity.class.getClassLoader().getResourceAsStream("xml文件路径")

3,初始化解析器后,我们就可以开始了,xml的标签很多,这里呢,我们需要调用的方法是。

int type = parser.getEventType();

我们查看api可知,这里获得的是标签,

比如:(这是系统中的定义)

int START_DOCUMENT = 0;

int END_DOCUMENT = 1;

int START_TAG = 2;

int END_TAG = 3;

从名字我们就能很容易的知道其含义,xml开始与结束的标签,以及一个标签对的开始与结束。

所以我们就可以对获得type与这些标签进行对比,这样我们就可以获取标签的值。

4,解析xml

    while (type != XmlPullParser.END_DOCUMENT) {
switch (type) {
case XmlPullParser.START_TAG:
if ("infos".equals(parser.getName())) {
// 解析到了全局开始标签。
weatherinfos = new ArrayList<WeatherInfo>();
} else if ("city".equals(parser.getName())) {
weatherinfo = new WeatherInfo();
// 得到id
String id = parser.getAttributeValue(0);
weatherinfo.setId(Integer.parseInt(id));
} else if ("temp".equals(parser.getName())) {
String temp = parser.nextText();
weatherinfo.setTemp(temp);
}
break; case XmlPullParser.END_TAG:
if ("city".equals(parser.getName())) {
// 一个城市的信息处理完毕。
weatherinfos.add(weatherinfo);
weatherinfo = null;
} break; } type = parser.next();
}

xml的解析后,我们还要保存它的值,所以我就把每次xml解析后的值,放到集合中,

这里要注意几点,

parser.getAttributeValue(0);是得到标签中的id值。
每解析完一次后,我们要把循环往下走,所以type = parser.next();

这样我们就可以解析出xml中的数据了。

 

作者:Darren

微博:@IT_攻城师

出处:http://www.cnblogs.com/fengtengfei/

Android开发pool解析xml的更多相关文章

  1. Android开发之获取xml文件的输入流对象

    介绍两种Android开发中获取xml文件的输入流对象 第一种:通过assets目录获取 1.首先是在Project下app/src/main目录下创建一个assets文件夹,将需要获取的xml文件放 ...

  2. Android之Pull解析XML

    一.Pull解析方法介绍 除了可以使用SAX和DOM解析XML文件,也可以使用Android内置的Pull解析器解析XML文件.Pull解析器的运行方式与SAX解析器相似.它也是事件触发的.Pull解 ...

  3. Android之DOM解析XML

    一.DOM解析方法介绍 DOM是基于树形结构的节点或信息片段的集合,允许开发人员使用DOM API遍历XML树,检索所需数据.分析该结构通常需要加载整个文档和构造树形结构,然后才可以检索和更新节点信息 ...

  4. Android中用PULL解析XML

    解析XML的方式有DOM,SAX,PULL,那为什么要在Android中使用PULL解析呢?首先来说一下PULL解析的优点,然后再说一下其他两种解析方式的缺点,答案就清晰可见啦. DOM不适合文档较大 ...

  5. Android之SAX解析XML

    一.SAX解析方法介绍 SAX(Simple API for XML)是一个解析速度快并且占用内存少的XML解析器,非常适合用于Android等移动设备. SAX解析器是一种基于事件的解析器,事件驱动 ...

  6. Android使用SAX解析XML(1)

    可扩展标记语言XML是一种数据交换格式,允许用户自己定义,适合Web传输,能提供独立于程序的数据.XML在Android中也有广泛的应用,Android解析XML的方法有很多,本文介绍使用SAX(Si ...

  7. 关于android开发添加菜单XML文件之后无法在R.java中生成ID的问题

    因为和同学分开做的android软件,现在想整合他做的界面部分,于是拷贝了res和src文件夹的文件,其中包括一个res.menu文件夹中的XML.但是每次将该文件导入到工程总无法自动在R.java中 ...

  8. Android使用pull解析xml

    一.理论准备     Pull解析器的运行方式与 SAX 解析器相似.它提供了类似的事件,如:开始元素和结束元素事件,使用parser.next()可以进入下一个元素并触发相应事件.跟SAX不同的是, ...

  9. android——使用pull解析xml文件

    1.persons.xml 将persons.xml文件放到src目录下.其代码如下: <?xml version='1.0' encoding='UTF-8' standalone='yes' ...

随机推荐

  1. 高逼格关闭Win10防火墙

    作为一个开发人员,你还需要进入这个界面来关闭防火墙么? 如果是,那么现在,我将为大家介绍一种高逼格的方式: 第一步: 打开Windows PowerShell(管理员) 第二步:查看当前防火墙状态:n ...

  2. python 04 学生信息管理系统

    今天任务不多,做了学生信息管理系统1.0,使用字典存储学生个体信息,列表存储学生字典.注意dict定义要在循环体内,若定义成全局变量或循环体外,则旧数据会被新数据覆盖.dict属于可变类型数据,内容改 ...

  3. 如何用纯 CSS 创作一个渐变色动画边框

    效果预览 在线演示 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/odpRKX 可交互视频教 ...

  4. tiny4412学习笔记-将uboot、zImage、文件系统烧到emmc中 (转)

    http://blog.chinaunix.net/uid-30025978-id-4788683.html 1.首先还是要将u-boot写入SD卡中从SD卡启动. 使用读卡器将SD插入电脑中,使用u ...

  5. 生成优惠券,并将优惠券存入Mysql

    #coding:utf-8 import random import string import MySQLdb def gen_charint(filename, width =4, num=5): ...

  6. python-基本运算符(解压缩-必考)

    基本运算符 算术运算符 x =10 y =20 print(x+y) 30 print(x-y) -10 print(x*y) 200 print(x/y) 0.5 print(x%y)#取余 10 ...

  7. Python爬虫-抖音小视频-mitmproxy与Appium

    目的:  爬取抖音小视频 工具:  mitmproxy.Appium 思路: 1.  通过 mitmproxy 截取请求, 找出 response 为 video 的请求. 2.  通过 mitmdu ...

  8. 十二.GUI

    tkinter模块(tkinter是一个跨平台的PythonGUI工具包): #Tkinter是一个跨平台的Python GUI工具包 import tkinter top=tkinter.Tk() ...

  9. bootspring + mybaits +mysql Date 类型的处理

    mysql 中有date 类型的属性,java实体类中对应的属性是java.sql.Date 类的. 最初的bug是怎么新增,joinDate 值都是null. 千辛万苦学会了用String转Date ...

  10. Jmeter用于接口测试中,关联如何实现

    Jmeter用于接口测试时,后一个接口经常需要用到前一次接口返回的结果,应该如何获取前一次请求的结果值,应用于后一个接口呢,拿一个登录的例子来说明如何获取. 1.打开jmeter, 使用的3.3的版本 ...