Android学习笔记43-XML文件解析(Pull方式)

news/2024/7/2 1:11:43

解析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>     Person对象列表
 6      * Author  :    博客园-依旧淡然
 7      */
 8     public static List<Person> readXML(InputStream inputStream, String inputEncoding) throws Exception {
 9         
10         List<Person> 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<Person>();
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


http://www.niftyadmin.cn/n/3854436.html

相关文章

Android Tools Project Site

Android Tools Project Site Search this siteProjects OverviewScreenshotsRelease StatusRoadmapDownloadPreview ChannelRecent ChangesTechnical docsNew Build SystemKnown IssuesTipsBuild OverviewContributingFeedbackTechnical docs‎ > ‎New Build System‎ >…

12款浏览器兼容性测试工具推荐

对于前端开发工程师来说&#xff0c;确保代码在各种主流浏览器的各个版本中都能正常工作是件很费时的事情&#xff0c;幸运的是&#xff0c;有很多优秀的工具可以帮助测试浏览器的兼容性&#xff0c;让我们一起看看这些很棒的工具。 Spoon Browser Sandbox 点击你需要测试的浏…

总结Struts,Hibernate,Spring框架

总结Struts&#xff0c;Hibernate&#xff0c;Spring框架 [code] Hibernate工作原理及为什么要用&#xff1f; 原理&#xff1a; 1.读取并解析配置文件 2.读取并解析映射信息&#xff0c;创建SessionFactory 3.打开Sesssion 4.创建事务Transation 5.持久化操作 6.提交事务 7.关…

visual studio 2012 update3

http://www.microsoft.com/zh-cn/download/confirmation.aspx?id39305

Struts+Spring+Hibernate练习

StrutsSpringHibernate练习[code]工具&#xff1a;Eclipse3.1、MyEclipse4.03、Tomcat5.5.9、Properties Editor插件、MySql4.1.13新建工程&#xff1a;名称为 login创建Struts框架创建 index.jsp&#xff0c;增加一链接指向 login.jsp按下Ctrl N&#xff0c;创建 login.jsp、…

地址代码uboot之start.S源码分析

每日一贴,今天的容内关键字为地址代码 /arch/arm920t/cpu/start.s件文就是uboot的第一阶段&#xff0c;uboot的前4K容内&#xff0c;即nandflash中的前4K容内会被拷贝到cpu中的SRAM中运行&#xff0c;这一小段代码担任初始化硬件环境&#xff0c;并将残余的Uboot代码加载到内存…

[转]搜狗2012.9.23校园招聘会笔试题

转载请标明出处&#xff0c;原文地址&#xff1a;http://blog.csdn.net/hackbuteer1/article/details/8016173 C/C类 1、以下程序的输出是&#xff08;12&#xff09; [cpp] view plaincopy class Base { public: Base(int j) : i(j) { } virtual ~Base() { …

Spring框架与AOP思想的研究与应用

Spring框架与AOP思想的研究与应用 [code] Spring框架与AOP思想的研究与应用(1)本文关键词&#xff1a; Spring AOP引言Aspect Oriented Programming(AOP)是近年来计算机技术中比较热门的话题之一。其发展历史从学术领域和研发机构的运用开始&#xff0c;目前流行的Spring应用程…