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 ...
随机推荐
- 利用R产生随机数
生成随机数有两个函数runif()和rnorm(),其中r表示的是random随机的意思,unif表示的是均匀分布,而norm表示的是正态分布. 1)生成10个2到3之间的,服从均匀分布的随机数:ru ...
- switch_to_frame,切换frame框架
页面包含frame/iframe标签,需要先切换到该frame标签,再去定位属于这个frame的元素. 如果要再去定位其他frame的元素,需要回到该frame的上级,定位到要选择的frame,不 ...
- 使用UUID方法生成全球唯一标识
需要生成唯一字符串,如生成应用标识等,可以直接用java.util.UUID类实现. UUID(Universally Unique Identifier)全局唯一标识符,是指在一台机器上生成的数字, ...
- 'org.springframework.beans.factory.xml.XmlBeanFactory' is deprecated
'org.springframework.beans.factory.xml.XmlBeanFactory' is deprecated XmlBeanFactory这个类已经被摒弃了.可以用以下代替 ...
- Cocos2d-x 3.x 在wp8中调用系统字体的解决方案
问题和解决方法: 在使用cocos2d-x设计游戏的时候,字体是个很重要的部分.如果游戏中对字体没有太多的要求,就可以使用平台系统自带的字体,可以节省游戏的尺寸,以及减小游戏运行时所占用的内存.当加载 ...
- 从RTTI谈C++的向下转型
转自:http://blog.chinaunix.net/uid-28541347-id-4251713.html 从RTTI谈C++的向下转型 1.什么是RTTI? RTTI 是“Runtime T ...
- python之递归锁【Rlock】
# 递归锁:就是一把锁中还有一把小锁,比如学校的大门口有一个大锁,学校里的 #每个教室也有一把小锁,以后所有的锁都用rlock就可以了,不要用lock,尤其是多层锁的时候,必须要用递归锁 import ...
- 理解dynamic programming动态规划
何谓动态规划? 以菲波那切数列为例, int fib(int n ){ if(n == 0 || n ==1){ return 1; }else{ return fib(n - 1) + fib(n ...
- iOS.Book.Effective Objective-C 2.0
1. 中文翻译版 (更新中) https://github.com/HagerHu/effective-objective-c-2.0 2. Book的主页 和 代码主页 http://www.eff ...
- 使用phpExcel导出excel文件
function export($log_list_export) { require "../include/phpexcel/PHPExcel.php"; require &q ...