博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android学习笔记43-XML文件解析(Pull方式)
阅读量:7097 次
发布时间:2019-06-28

本文共 3607 字,大约阅读时间需要 12 分钟。

解析XML文档的方法是很多的,除了常用的SAX和DOM方法以外,还可以使用Java自带的Pull来解析XML文档。

 

1.使用Pull解析器解析XML文档

  Pull解析器的运行方式和SAX解析器很相似,它提供了类似的事件,比如文档开始、文档结束、开始元素和结束元素等。使用parser.next()方法可以进入下一个元素并触发相应的事件。各种事件均已数字的形式被发送,因此可以在程序中使用一个switch语句来对事件进行选择,然后进行相应的事件处理。

1.1事件类型

  Pull解析器提供的事件类型总共有5种,分别如下:

  (1)START_DOCUMENT         文档开始

  (2)START_TAG         开始元素

  (3)TEXT           文本

  (4)END_TAG        结束元素

  (5)END_DOCUMENT     文档结束

1.2常用方法

  使用Pull解析器XmlPullParser解析XML文档时,主要会用到以下几个常用方法。

  (1)int getAttributeCount();         //获取当前元素的属性个数

  (2)String getAttributeValue(int index);   //获取属性值

  (3)int getEventType();           //获取事件类型

  (4)String getName();             //用于START_TAG和END_TAG事件中,获取当前元素的名字

  (5)int next();                 //处理下一个元素

  (6)int nextText();              //用于START_TAG事件中,获得下一个TEXT类型的元素

1.3创建Pull解析器

  可以通过以下两个步骤创建一个Pull解析器。

  (1)通过调用XmlPullParserFactory工厂类的newInstance()方法,创建一个Pull解析器工厂对象。

  (2)通过调用Pull解析器工厂对象的newPullParser()方法,创建一个Pull解析器对象。

  创建好了Pull解析器对象之后,就可以通过调用Pull解析器对象的setInput()方法传入想要解析的XML文档了。其中,setInput()方法提供了两种重载的形式,分别为:

  (1)void setInput(Reader in);

  (2)void setInput(InputStream inputStream, String inputEncoding);

1.4实例

  如下的代码使用Pull解析器对上两篇博文中提到的“person.xml”文档进行了解析,提取出了XML文档中的person信息,并存储到了Person对象列表。

1     /* 2      * Function :   使用Pull解析器解析XML文档 3      * Param   :  inputStream      以输入流的形式传入XML文档 4      *               inputEncoding     XML文档的编码格式 5      * Retuen  :    List
 Person对象列表 6 * Author  : 博客园-依旧淡然 7 */ 8 public static List
readXML(InputStream inputStream, String inputEncoding) throws Exception { 9 10 List
list = null; //存储解析得到的所有Person对象11 Person person = null;    //存储解析得到的单个Person对象12 13 XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); //创建Pull解析器工厂14 XmlPullParser xmlPullParser = factory.newPullParser(); //创建Pull解析器15 xmlPullParser.setInput(inputStream, inputEncoding); //以输入流的形式传入所要解析的XML文档16 17 int eventType = xmlPullParser.getEventType(); //获取事件类型18 while(eventType != XmlPullParser.END_DOCUMENT) { 19 switch(eventType) {20 case XmlPullParser.START_DOCUMENT: //文档开始21 list = new ArrayList
();22 break;23 case XmlPullParser.START_TAG: //开始元素24 if(xmlPullParser.getName().equals("person")) {25 person = new Person();26 int id = Integer.parseInt(xmlPullParser.getAttributeValue(0)); //获取元素的属性值27 person.setId(id);28 } else if(xmlPullParser.getName().equals("name")) {29 String name = xmlPullParser.nextText(); //获取元素的内容30 person.setName(name);31 } else if(xmlPullParser.getName().equals("age")) {32 int age = Integer.parseInt(xmlPullParser.nextText());33 person.setAge(age);34 }35 break;36 case XmlPullParser.END_TAG: //结束元素37 if(xmlPullParser.getName().equals("person")) {38 list.add(person);39 person = null;40 }41 break;42 }43 eventType = xmlPullParser.next(); //产生循环,遍历所有元素44 }45 return list;46 }

  需要注意的一点是,使用Pull解析器时,需要在工程中导入kxml2-2.2.2.jar包。

转载于:https://www.cnblogs.com/britalient/p/3173276.html

你可能感兴趣的文章
Hello World 之 控制台版本(Console Application)
查看>>
linux下nginx+php+mysql 自助环境搭建
查看>>
udp通信
查看>>
国家模式c++
查看>>
假设动态运行java文字,当在脚本式配置,这是非常方便的
查看>>
android4.0 的图库Gallery2代码分析(三) 之Applition的初始化准备
查看>>
SOM自组织映射网络 教程
查看>>
lintcode:寻找旋转排序数组中的最小值 II
查看>>
树莓派学习笔记——交叉编译练习之SQLite3安装
查看>>
android stuido build 慢的解决办法
查看>>
Appium移动自动化测试(四)--one demo
查看>>
nginx配置location总结及rewrite规则写法
查看>>
python 登陆接口
查看>>
RedHat7 部署ELK日志分析系统
查看>>
DS实验题 Missile
查看>>
微信上 网页图片点击全屏放大
查看>>
jquery获取css颜色值返回RGB应用
查看>>
(void __user *)arg 中__user的作用
查看>>
Redefine:Change in the Changing World
查看>>
POJ 3436 ACM Computer Factory 最大流
查看>>