首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > XML SOAP >

Android XML文档解析(3)——Pull解析

2013-10-13 
Android XML文档解析(三)——Pull解析------------------------------------------------------------------

Android XML文档解析(三)——Pull解析
------------------------------------------------------------------

       此文章仅作为学习交流所用

       转载或引用请务必注明原文地址:

       http://blog.csdn.net/luzhenrong45/article/

       或联系作者:luzhenrong45@gmail.com 

       谢谢!                       

------------------------------------------------------------------

 

一.Pull 介绍

   Android开发官网对于Pull的介绍: http://developer.android.com/reference/org/xmlpull/v1/XmlPullParser.html

      Pull解析和Sax解析很相似,都是轻量级的解析,在Android的内核中已经嵌入了Pull,所以我们不需要再添加第三方jar包来支持Pull. Android系统中采用Pull技术解析XML文档比用SAX技术性能要好得多。建议Android的开发者采用PULL技术解析XML文档。跟SAX类似,它提供了类似的事件,如开始元素,结束元素事件.只不过PULL技术返回的事件类型是整型,所以我们只要对返回的事件进行处理就行了。Pull解析使用parser.next()可以进入下一个元素并触发相应事件.调用Pull与SAX不同的是,SAX的事件驱动是回调相应方法,需要提供回调的方法,而后在SAX内部自动调用相应的方法,而Pull解析器并没有强制要求提供触发的方法,因为它触发的事件并不是一个方法,而是一个常量数字.至于要不要处理,由程序员自己决定,可通过switch方法进行选择.

    Pull解析器的事件只有5个:

START_DOCUMENT  (常量0)START_TAG (常量2)TEXT (常量4)END_TAG (常量3)END_DOCUMENT (常量1)

 

二. 使用Pull解析XML步骤

     (1)取得pull解析器

XmlPullParser parser = Xml.newPullParser();

  (2)设置解析器的输入流

parser.setInput(inStream, "UTF-8");

  (3)产生第一个事件

int eventType=pullParser.getEventType();//触发第一个事件

  (4)开始解析

判断是否 是文件开始:XmlPullParser.START_DOCUMENT:判断是否是标签开始:XmlPullParser.START_TAG判断是否是标签结束:XmlPullParser.END_TAG 判断是否是文件结尾:XmlPullParser.END_DOCUMENT

     (5)将指针往下推

parser.next();

    (6)解析结束

 

三. Pull解析Demo

(一)仍然以前面两篇文章介绍的工程来实现Pull对XML文件的解析。

<?xml version="1.0"  encoding="UTF-8"?><persons>    <person id="0">        <name>刘德华</name>        <sex>男</sex>        <age>21</age>    </person>    <person id="1">        <name>张漫玉</name>        <sex>女</sex>        <age>22</age>    </person>    <person id="2">        <name>张易谋</name>        <sex>男</sex>        <age>23</age>    </person>    <person id="3">        <name>周新驰</name>        <sex>未知</sex>        <age>24</age>    </person>    <person id="4">        <name>纳兰容若</name>        <sex>男</sex>        <age>25</age>    </person></persons>

 

 

(二)工程源码框架
Android XML文档解析(3)——Pull解析

 

(2)PullParseService.java  (核心代码)

package com.laolu.parser;import java.io.InputStream;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import org.xmlpull.v1.XmlPullParser;import android.util.Xml;public class PullParserService {List<Map<String,Object>> persons=null;Map<String,Object> person=null;public PullParserService() {}public List<Map<String,Object>> getPersons(InputStream inputStream) throws Exception{XmlPullParser pullParser=Xml.newPullParser();pullParser.setInput(inputStream, "UTF-8");int eventType=pullParser.getEventType();//触发第一个事件while(eventType!=XmlPullParser.END_DOCUMENT){switch(eventType){case XmlPullParser.START_DOCUMENT:persons=new ArrayList<Map<String,Object>>(); break;case XmlPullParser.START_TAG:if("person".equals(pullParser.getName().trim())){person=new HashMap<String,Object>();String id=pullParser.getAttributeValue(0);person.put("id", id);}if(person!=null){if("name".equals(pullParser.getName().trim())){String name=pullParser.nextText();person.put("name", name);}else if("sex".equals(pullParser.getName().trim())){String sex=pullParser.nextText();person.put("sex", sex);}else if("age".equals(pullParser.getName().trim())){String age=pullParser.nextText();person.put("age", age);}}break;case XmlPullParser.END_TAG:if("person".equals(pullParser.getName().trim())){persons.add(person);person=null;}break;}eventType=pullParser.next();}return persons;}}


 

 

 

 

 

  

热点排行