除了可以使用SAX或DOM解析XML文件之外,在Android中可以使用Android内置的Pull解析器解析XML文件。 Pull解析器是一个开源的java项目,既可以用于android,也可以用于JavaEE。如果用在javaEE需要把其jar文件放入类路径中,因为Android已经集成进了Pull解析器,所以无需添加任何jar文件。android系统本身使用到的各种xml文件,其内部也是采用Pull解析器进行解析的。 Pull解析器的运行方式与SAX 解析器相似。它提供了类似的事件,如:开始元素和结束元素事件,使用parser.next()可以进入下一个元素并触发相应事件。跟SAX不同的是, Pull解析器产生的事件是一个数字,而非方法,因此可以使用一个switch对感兴趣的事件进行处理。当元素开始解析时,调用parser.nextText()方法可以获取下一个Text类型节点的值    
Pull XML解析器早已经被google集成到Android sdk当中,它是google官方推荐的解析器。如果我们要在Java桌面、J2ME等当中使用Pull方式生成xml文件和
解析xml文件,需要用到kxml2;KXML解析器是基于普通XML PULL解析器的一个小巧的解析器,官网是http://kxml.org/,普通XML PULL解析器的官网是http://xmlpull.org/    
    
XmlPull和Sax类似,是基于流(stream)操作文件,然后根据节点事件回调开发者编写的处理程序。因为是基于流的处理,因此Xmlpull和 Sax都比较节约内存资源,不会象Dom那样要把所有节点以对橡树的形式展现在内存中。 但Xmlpull比Sax更简明,而且不需要扫描完整个流。

具体示例:
(1)xml文件内容:在工程跟目录下建立xml/data1.xml文件,内容如下:

<students><student><name sex="man">小明</name><nickName>明明</nickName><age>20</age><address>北京</address></student><student><name sex="woman">小红</name><nickName>红红</nickName><age>20</age><address>上海</address></student><student><name sex="man">小亮</name><nickName>亮亮</nickName><age>30</age><address>广州</address></student><student-0><name sex="man">小亮-0</name><nickName>亮亮-0</nickName><age>200</age><address>广州-0</address></student-0>
</students>

(2)    解析:

private void parseXml() {long startTime = System.currentTimeMillis();System.out.println("开始解析:" + startTime);Bean1 bean = null;// XmlPullParser是android自带的,Java中默认不支持,因此需要下载kxml2.jar包XmlPullParserFactory factory;try {factory = XmlPullParserFactory.newInstance();factory.setNamespaceAware(true);XmlPullParser parser = factory.newPullParser();// 初始化xmlPull解析器parser.setInput(new FileInputStream(xmlFile), "utf-8");int type = parser.getEventType();// 无限判断文件类型进行读取while (type != XmlPullParser.END_DOCUMENT) {switch (type) {case XmlPullParser.START_TAG:if (parser.getName().equals("students")) {datas = new ArrayList<>();} else if (parser.getName().equals("student")) {bean = new Bean1();} else if (parser.getName().equals("name")) {bean.setSex(parser.getAttributeValue(null, "sex"));bean.setName(parser.nextText());} else if (parser.getName().equals("address")) {bean.setAddress(parser.nextText());}else if(parser.getName().equals("age")){bean.setAge(parser.nextText());}else if (parser.getName().equals("nickName")) {bean.setNickName(parser.nextText());}break;case XmlPullParser.END_TAG:if (parser.getName().equals("student")) {datas.add(bean);}break;default:break;}type = parser.next();}} catch (XmlPullParserException e) {e.printStackTrace();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}long finishTime = System.currentTimeMillis();long time = finishTime - startTime;System.out.println("结束解析: " + finishTime + "\nPull解析耗时:" + time);for(Bean1 student : datas){System.out.println(student.toString());}}

以上的代码在Java项目或Android项目中都可以使用。在Android中还提供了另一个类:XmlResourceParser,XmlResourceParser是XmlPullParser的子类,使用如下:(在Androiddemo中,xml文件存放在手机存储的根目录下:data1.xml)

 private void resPullParseXml() {try {Bean1 bean = null;// XmlResourceParser是XMPullParser的子类XmlResourceParser xrp = getResources().getXml(R.xml.data1);while (xrp.getEventType() != XmlResourceParser.END_DOCUMENT) {// 如果遇到开始标签switch (xrp.getEventType()) {case XmlResourceParser.START_TAG:// 获取该标签的标签名String tagName = xrp.getName();if (tagName.equals("students")) {// datas = new ArrayList<Bean1>();} else if (tagName.equals("student")) {bean = new Bean1();} else if (tagName.equals("name")) {// 根据属性名来获取属性值bean.setSex(xrp.getAttributeValue(null, "sex"));bean.setName(xrp.nextText());} else if (tagName.equals("nickName")) {bean.setNickName(xrp.nextText());} else if (tagName.equals("age")) {bean.setAge(xrp.nextText());} else if (tagName.equals("address")) {bean.setAddress(xrp.nextText());}break;case XmlResourceParser.END_TAG:if (xrp.getName().equals("student")) {datas.add(bean);}break;}xrp.next();}} catch (XmlPullParserException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}

demo传送门:
https://github.com/215836017/ParseXML_java

https://github.com/215836017/ParserXML_android

注:上面Java的demo中用到的xml文件是当前目录下的xml/data1.xml文件。result.xml是生成的文件。data2.xml, data3.xml是用来比较解析时间的。
    Android的demo中用到xml文件是存放在手机根目录下的data1.xml文件。

java解析XML——Pull解析相关推荐

  1. Android读书笔记(六) OkHttp(GET、POST)、解析XML(Pull、SAX)

    1.OkHttp的使用   使用OkHttp需要添加库到app/build.gradle文件中,如下: dependencies {compile 'com.squareup.okhttp3:okht ...

  2. Android XML pull 解析器

    Android 并未提供对 Java StAX API 的支持.但是,Android 确实附带了一个 pull 解析器,其工作方式类似于 StAX.它允许您的应用程序代码从解析器中获取事件,这与 SA ...

  3. Xml解析之PULL解析 例1

    1 <?xml version="1.0" encoding="UTF-8"?> 2 <persons> 3 <person id ...

  4. XML解析:PULL解析

    为什么80%的码农都做不了架构师?>>> 概述: PULL解析器小巧轻便,解析速度快,简单易用,非常适合在Android移动设备中使用,Android系统内部在解析各种XML时也是用 ...

  5. JAVA中xml文件解析几种方式

    1. DOM解析xml /*** DOM解析xml* @param xmlPath xml文件路径*/public static void getInfoByDom(String xmlPath){D ...

  6. JavaScript解析XML,js解析xml字符串

    XMl 可扩展的文本标记语言,用来传输数据和保存数据 整个文档是一个文档节点 每个XMl标签是一个元素节点 包含在xml标签内的文本是文本节点 每个xml属性是一个属性节点 注释属于一个注释节点XML ...

  7. Pull和SAX解析XML,以解析中国省市列表为例子

    废话不说直接上代码 //地区对象 public class Area { private String aName ; //地区名 private String aCode ; //地区号 publi ...

  8. Android[中级教程]第五章 XML解析之PULL解析器

    这一章我们来学习Android中的XML解析器,Android中自带了三个XML解析器,有PULL,SAX,DOM解析器,其中PULL跟SAX都是以事件作为驱动导向的解析器,优点是占用内存小,处理速度 ...

  9. java怎么xml文件解析_Java对Xml文件解析

    JAVA 解析 XML 通常有两种方式,DOM 和 SAX. DOM 虽然是 W3C 的标准,提供了标准的解析方式,但它的解析效率一直不尽如人意,因为使用DOM解析XML时,解析器读入整个文档并构建一 ...

  10. java sax xml文件解析_java解析xml文件-DOM/SAX

    java解析xml文件的两种方式 1:DOM 原理:把整个文档加载到内存,转化成dom树,之后应用程序可以随机的访问dom树的任何数据,灵活 快,但消耗内存 一个简单的xml 使用java解析 //b ...

最新文章

  1. 其他主流开源硬件简介BeagleBone Black快速入门
  2. Redis可视化工具 Redis Desktop Manager
  3. GLUT及其函数的用法整理
  4. 用计算机KADIO算方差,KADIO计算器怎样算方差
  5. Silverlight 动态调用 WebService
  6. SequoiaDB 系列之六 :源码分析之coord节点
  7. Vision Transformer 论文解读
  8. ZooKeeper官方文档学习笔记05-ZooKeeper的屏障(Barrier)和队列(Queue)教程
  9. pivottablejs|在Jupyter 中尽情使用数据透视表!
  10. 微信语音技术原理_微信语音多群直播原理-一起学堂
  11. 智慧园区弱电系统集成建设方案
  12. IntelliJ IDEA自带接口测试工具
  13. android保存裁剪图片,Android选择图片并裁剪,无法保存经过裁剪的图片
  14. FTP上传失败报错解决
  15. “二十一天好习惯”第一期-20
  16. 怎么设置邮箱自动回复?如何设置自动回复功能?
  17. 在word中在方框里打钩
  18. A Game of Thrones(50)
  19. 飞塔防火墙的配置与策略
  20. 苹果手机怎么把计算机放到桌面,iPhone怎么将电脑上的电影拖到手机上观看?

热门文章

  1. 基于51单片机步进电机控制
  2. 光纤传输网的发展及其新的分层结构
  3. jquery动态创建表格
  4. vue入门实例-输入行列,自定义表格
  5. 【零基础】量子纠缠图像问世,简单解读实验原理
  6. css 去掉a标签下划线,CSS 解决 a标签去掉下划线 text-decoration: none无效 的解决方案...
  7. TeamViewer14试用版到期怎么解决--免费许可证(仅非商业用途)
  8. CFree5构建中止问题
  9. HTML如何剪切图片,css如何截取图片?
  10. Python爬取城市二手房数据