Android-Xml,PullParser,解析
在上一篇博客,Android-XML格式描述,介绍来XML在Android中的格式;
解析persons.xml文件内容:

<?xml version="1.0" encoding="utf-8"?> <persons>
<person id="0">
<name>zhangsan0</name>
<age>10</age>
</person>
<person id="1">
<name>zhangsan1</name>
<age>11</age>
</person>
<person id="2">
<name>zhangsan2</name>
<age>12</age>
</person>
<person id="3">
<name>zhangsan3</name>
<age>13</age>
</person>
<person id="4">
<name>zhangsan4</name>
<age>14</age>
</person>
<person id="5">
<name>zhangsan5</name>
<age>15</age>
</person>
<person id="6">
<name>zhangsan6</name>
<age>16</age>
</person>
<person id="7">
<name>zhangsan7</name>
<age>17</age>
</person>
<person id="8">
<name>zhangsan8</name>
<age>18</age>
</person>
<person id="9">
<name>zhangsan9</name>
<age>19</age>
</person>
<person id="10">
<name>zhangsan10</name>
<age>20</age>
</person>
<person id="11">
<name>zhangsan11</name>
<age>21</age>
</person>
<person id="12">
<name>zhangsan12</name>
<age>22</age>
</person>
<person id="13">
<name>zhangsan13</name>
<age>23</age>
</person>
<person id="14">
<name>zhangsan14</name>
<age>24</age>
</person>
<person id="15">
<name>zhangsan15</name>
<age>25</age>
</person>
<person id="16">
<name>zhangsan16</name>
<age>26</age>
</person>
<person id="17">
<name>zhangsan17</name>
<age>27</age>
</person>
<person id="18">
<name>zhangsan18</name>
<age>28</age>
</person>
<person id="19">
<name>zhangsan19</name>
<age>29</age>
</person>
</persons>
点击动作,去解析xml数据,并Log.d打印出来:

PullParser解析器是基于事件的,有开始文档,结束文档,开始标签,结束标签,当事件解析到那个节点的时候,是可以通过pullParser.getName();得到某个具体节点;
@Override
public void onClick(View v) { try {
// 得到Android 提供的Xml解析器 PullParser
XmlPullParser pullParser = Xml.newPullParser(); // 指定文件流对象
InputStream is = openFileInput("persons.xml"); // 设置需要解析的文件流对象
pullParser.setInput(is, "utf-8"); // 开始解析 // 获取解析事件的类型
int eventType = pullParser.getEventType(); List<Person> persons = null;
Person person = null; // 只要没有解析到文档的结尾,就继续往下不停的解析
while(eventType != XmlPullParser.END_DOCUMENT) { switch (eventType) {
// 节点开始标记<xxx>
case XmlPullParser.START_TAG:
// 解析到根节点
if (pullParser.getName().equals("persons")) {
persons = new ArrayList<Person>();
}
// 解析到子节点
else if (pullParser.getName().equals("person")) {
person = new Person();
// 解析ID属性
// 因为我只有一个属性,所以是0
int id = Integer.parseInt(pullParser.getAttributeValue(0));
person.setId(id);
}
// 解析到子节点的name
else if (pullParser.getName().equals("name")) {
person.setName(pullParser.nextText());
}
// 解析到子节点的age
else if (pullParser.getName().equals("age")) {
person.setAge(Integer.valueOf(pullParser.nextText()));
}
break;
case XmlPullParser.END_TAG: // 节点结束标记</xxx>
// 当解析到</person>就代表解析一个完一个子节点了
if (pullParser.getName().equals("person")) {
persons.add(person);
person = null;
}
break;
default:
break;
} // 更新解析的哪里了
eventType = pullParser.next();
} // 把解析出来的Xml数据,进行日志打印
for (Person p : persons) {
Log.d(TAG, "解析出来的Xml数据:" + p.toString());
} } catch (Exception e) {
e.printStackTrace();
}
}
解析后的Log.d 打印结果:

解析出来的Xml数据:Person{id=0, name=’zhangsan0’, age=10}
解析出来的Xml数据:Person{id=1, name=’zhangsan1’, age=11}
解析出来的Xml数据:Person{id=2, name=’zhangsan2’, age=12}
解析出来的Xml数据:Person{id=3, name=’zhangsan3’, age=13}
解析出来的Xml数据:Person{id=4, name=’zhangsan4’, age=14}
解析出来的Xml数据:Person{id=5, name=’zhangsan5’, age=15}
解析出来的Xml数据:Person{id=6, name=’zhangsan6’, age=16}
解析出来的Xml数据:Person{id=7, name=’zhangsan7’, age=17}
解析出来的Xml数据:Person{id=8, name=’zhangsan8’, age=18}
解析出来的Xml数据:Person{id=9, name=’zhangsan9’, age=19}
解析出来的Xml数据:Person{id=10, name=’zhangsan10’, age=20}
解析出来的Xml数据:Person{id=11, name=’zhangsan11’, age=21}
解析出来的Xml数据:Person{id=12, name=’zhangsan12’, age=22}
解析出来的Xml数据:Person{id=13, name=’zhangsan13’, age=23}
解析出来的Xml数据:Person{id=14, name=’zhangsan14’, age=24}
解析出来的Xml数据:Person{id=15, name=’zhangsan15’, age=25}
解析出来的Xml数据:Person{id=16, name=’zhangsan16’, age=26}
解析出来的Xml数据:Person{id=17, name=’zhangsan17’, age=27}
解析出来的Xml数据:Person{id=18, name=’zhangsan18’, age=28}
解析出来的Xml数据:Person{id=19, name=’zhangsan19’, age=29}
Android-Xml,PullParser,解析的更多相关文章
- 二、Android XML数据解析
XML,可扩展标记语言.可以用来存储数据,可以看做是一个小型的数据库,SharedPreference就是使用XML文件存储数据的,SQLite底层也是一个XML文件,而在网络应用方面,通常作为信息的 ...
- Android XML文件解析
在Android平台上可以使用Simple API for XML(SAX) . Document Object Model(DOM)和Android附带的pull解析器解析XML文件. 下面是本例子 ...
- Android XML数据解析
XML:可扩展标记语言.一般用于数据存储,SharedPreference就是使用xml文件保存信息的,SQLite底层也是xml文件,在网络方面通常作为信息的载体,把数据包装成xml来传递. XML ...
- Android中用PULL解析XML
解析XML的方式有DOM,SAX,PULL,那为什么要在Android中使用PULL解析呢?首先来说一下PULL解析的优点,然后再说一下其他两种解析方式的缺点,答案就清晰可见啦. DOM不适合文档较大 ...
- XML及PullParser解析
一.什么是XML 1.概念:extensive markup language(可扩展的标记语言) XML是一种通用的数据存储和交换格式,与平台无关,与编程语言无关,与操作系统无关.给数据集成和交互提 ...
- Android 生成xml文件及xml的解析
1.生成xml文件的两种方式 (1)采用拼接的方式生成xml(不推荐使用) (2)利用XmlSerializer类生成xml文件 package com.example.lucky.test52xml ...
- 八、Android学习第七天——XML文件解析方法(转)
(转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 八.Android学习第七天——XML文件解析方法 XML文件:exten ...
- android XMl 解析神奇xstream 六: 把集合list 转化为 XML文档
前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xs ...
- android XMl 解析神奇xstream 五: 把复杂对象转换成 xml ,并写入SD卡中的xml文件
前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xs ...
- android XMl 解析神奇xstream 四: 将复杂的xml文件解析为对象
前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xs ...
随机推荐
- Maven(Eclipse版)
前言: 由于最近工作学习,总是能碰到Maven的源码.虽然平时工作并不使用Maven,但是为了学习一些源码,还是必须要了解下.这篇文章不是一个全面的Maven解析,而是一个简单的介绍,包括Eclips ...
- MAVEN 引入外部JAR 包
MAVEN引入AXIS依赖的JAR包 在POM.XML中加入即可 <!-- axis 1.4 jar start --> <dependency> <groupId> ...
- angluarjs ng-repeat 行号
参考 https://zhidao.baidu.com/question/1882914672116911828.html $index
- Treasures and Vikings(两次搜索)
Treasures and Vikings https://www.luogu.org/problemnew/show/P4668 题意翻译 你有一张藏宝图,藏宝图可视为 N×MN×M 的网格.每个格 ...
- React Native 首次加载白屏优化
RN首次加载都会有个白屏过程,一般都会有500ms+的白屏时间,原生页面开发同样的页面会能够快速显示而在RN页面中有个明显的等待过程,这个会影响用户体验. 1.使用过渡页面 简单处理可以在白屏过程中加 ...
- python作业(第十一周)基于RabbitMQ rpc实现的主机管理
作业需求: 可以对指定机器异步的执行多个命令 例子: >>:run "df -h" --hosts 192.168.3.55 10.4.3.4 task id: 453 ...
- OpenStack的架构详解(转)
OpenStack既是一个社区,也是一个项目和一个开源软件,它提供了一个部署云的操作平台或工具集.其宗旨在于,帮助组织运行为虚拟计算或存储服务的云,为公有云.私有云,也为大云.小云提供可扩展的.灵活的 ...
- .net 4.0的Lazy<T>方法,反射实现延迟加载。
//自己山寨.public class YaLazy<T> { private bool _isValueCreated = false; public bool IsValueCreat ...
- 11月11日光棍节考试总结hhh
好吧,第一题字符串裸栈就能A 第二题字典序没调完,先写的第一题和第三题暴力,第二题读题感觉自己不会写,其实也能写出来,浪费了好多时间 第三题DP大概是写的暴力,原本可以搞到20分,要交的时候发现自己少 ...
- JDK 泛型之 Type
JDK 泛型之 Type 一.Type 接口 JDK 1.5 引入 Type,主要是为了泛型,没有泛型的之前,只有所谓的原始类型.此时,所有的原始类型都通过字节码文件类 Class 类进行抽象.Cla ...