androidのPULL方式解析XML

第三种方式:PULL解析器:

Android并未提供对Java StAX API的支持。但是,Android附带了一个pull解析器,其工作方式类似于StAX。它允许用户的应用程序代码从解析器中获取事件,这与SAX解析器自动将事件推入处理程序相反。

PULL解析器的运行方式和SAX类似,都是基于事件的模式。不同的是,在PULL解析过程中返回的是数字,且我们需要自己获取产生的事件然后做相应的操作,而不像SAX那样由处理器触发一种事件的方法,执行我们的代码。

下面是PULL解析XML的过程:

读取到xml的声明返回 START_DOCUMENT;

读取到xml的结束返回 END_DOCUMENT ;

读取到xml的开始标签返回 START_TAG

读取到xml的结束标签返回 END_TAG

读取到xml的文本返回 TEXT

PULL解析器小巧轻便,解析速度快,简单易用,非常适合在Android移动设备中使用,Android系统内部在解析各种XML时也是用PULL解析器,Android官方推荐开发者们使用Pull解析技术。Pull解析技术是第三方开发的开源技术,它同样可以应用于JavaSE开发。

PULL的工作原理:XML pull提供了开始元素和结束元素。当某个元素开始时,我们可以调用parser.nextText从XML文档中提取所有字符数据。当解释到一个文档结束时,自动生成EndDocument事件。

常用的XML pull的接口和类:

XmlPullParser:XML pull解析器是一个在XMLPULL VlAP1中提供了定义解析功能的接口。

XmlSerializer:它是一个接口,定义了XML信息集的序列。

XmlPullParserFactory:这个类用于在XMPULL V1 API中创建XML Pull解析器。

XmlPullParserException:抛出单一的XML pull解析器相关的错误。

package com.wyl.example;import java.io.IOException;import java.io.InputStream;import java.util.ArrayList;import java.util.List;import org.xmlpull.v1.XmlPullParser;import org.xmlpull.v1.XmlPullParserException;import android.util.Xml;//Android中Pull解析xml的类public class PullPersonService {public static List<Person> readXml(InputStream inStream)throws XmlPullParserException, IOException {//定义结果ListList<Person> persons = null;//创建pull解析类XmlPullParser parser = Xml.newPullParser();//设置数据读取格式parser.setInput(inStream, "UTF-8");     //解析的数据格式//得到每个节点的类型int eventCode = parser.getEventType();Person person = null;while (eventCode != XmlPullParser.END_DOCUMENT) {switch (eventCode) {case XmlPullParser.START_DOCUMENT://文档开始//初始化结果链表persons = new ArrayList<Person>();break;case XmlPullParser.START_TAG://开始元素//解析节点内容if("person".equals(parser.getName())){//初始化一个person对象person = new Person();//得到属性,设置idperson.setId(new Integer(parser.getAttributeValue(0)));}else if(null != person){//解析person的属性字段if("name".equals(parser.getName())){ //姓名person.setName(parser.nextText());}else if("age".equals(parser.getName())){ //年龄person.setAge(new Short(parser.nextText()));}}break;case XmlPullParser.END_TAG://文档结束if("person".equals(parser.getName())&&person != null){persons.add(person);person = null;}break;}//移动下一个节点eventCode = parser.next();}return persons;}}


PUll方式解析跟SAX解析类似,而且PULL是android官方推出的。

更多相关文章

  1. Android中Fragment与Activity之间的交互(两种实现方式)
  2. Android -- Button(按钮)的几种监听方式
  3. Android模拟产生事件
  4. Android中事件分发机制
  5. android的5种数据存储方式
  6. Android定时任务的实现方式
  7. 【Android基础】讲讲Android的事件分发机制
  8. Android快捷方式解密
  9. Android之View篇2————View的事件分发

随机推荐

  1. Android实现程序前后台切换效果
  2. android主流UI布局
  3. android looper介绍
  4. Android(安卓)adb不是内部或外部命令 问
  5. Dex2jar 与 JD-GUI快速反编译Android(安
  6. Android通过软解码播放视频
  7. 分析Android(安卓)根文件系统启动过程(ini
  8. Android: Service中创建窗口Dialog
  9. Android(安卓)adb的使用略解
  10. Android(安卓)arm linux kernel启动流程(