PULL 的工作原理:

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

常用的XML pull的接口和类:

XmlPullParser:该解析器是一个在org.xmlpull.v1中定义的解析功能的接口。

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

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

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

PULL解析器的运行方式和SAX类似,都是基于事件的模式。

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

读取到xml的声明返回 START_DOCUMENT; 结束返回 END_DOCUMENT ; 开始标签返回 START_TAG;

结束标签返回 END_TAG; 文本返回 TEXT。

代码如下

public List<Blog> parse(InputStream is) throws Exception {

List<Blog> blogList = null;
Blog blog = null;

//由android.util.Xml创建一个XmlPullParser实例
XmlPullParser parser = Xml.newPullParser();

//设置输入流并指明编码方式
parser.setInput(is, "UTF-8");

//产生第一个事件
int eventType = parser.getEventType();

while (eventType != XmlPullParser.END_DOCUMENT){

switch (eventType) {
//判断当前是否为文档开始事件

case XmlPullParser.START_DOCUMENT:
//初始化Blog集合
blogList = new ArrayList<Blog>();
break;

//判断当前事件是否为标签元素开始事件
case XmlPullParser.START_TAG:

if (parser.getName().equals("blog")){

//判断开始标签元素是否为Blog
blog = new Blog();

} else if (parser.getName().equals("blogTitle")){

eventType = parser.next();
//得到Blog标签的属性值,并设置Tile
blog.setBlogTile(parser.getText());
} else if (parser.getName().equals("blogText")) {

eventType = parser.next();

//得到Blog标签的属性值,并设置Text
blog.setBlogText(parser.getText());

}
break;

//判断当前事件是否为标签元素结束事件
case XmlPullParser.END_TAG:
//判断标签元素是否为blog
if(parser.getName().equals("blog")){
//将blog添加到blogList集合中
blogList.add(blog);
blog = null;

}
break;
}
//进入下一个元素并触发事件
eventType = parser.next();

}
return blogList;
}

[android]解析XML文件的方法有三种:PULL,DOM,SAM的更多相关文章

  1. Android程序解析XML文件的方法及使用PULL解析XML案例

    一.一般解析XML文件的方法有SAX和DOM.PULL (1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信 ...

  2. android解析xml文件的方式

    android解析xml文件的方式   作者:东子哥 ,发布于2012-11-26,来源:博客园   在androd手机中处理xml数据时很常见的事情,通常在不同平台传输数据的时候,我们就可能使用xm ...

  3. android解析XML总结(SAX、Pull、Dom三种方式) <转载>

    android解析XML总结(SAX.Pull.Dom三种方式) http://www.cnblogs.com/JerryWang1991/archive/2012/02/24/2365507.htm ...

  4. Android之 解析XML文件(1)—— Pull解析

    (以下文章基本照抄<第一行代码>) 解析XML文件有很多方法,这里主要讲Pull解析和SAX解析.这篇文章主要是讲Pull解析. 一.Pull解析参考代码 先上代码: private vo ...

  5. Android 解析XML文件和生成XML文件

    解析XML文件 public static void initXML(Context context) { //can't create in /data/media/0 because permis ...

  6. Android解析XML文件

    XML文件和获取XML值 XML文件样例 <?xml version="1.0" encoding="utf-8"?> <citys> ...

  7. Android解析xml文件-采用DOM,PULL,SAX三种方法解析

    解析如下xml文件 <?xml version="1.0" encoding="UTF-8"?> <persons> <perso ...

  8. android解析xml文件方法之一-----DOM

    Hello.xml文件 <dict num="219" id="219" name="219"> <key>hell ...

  9. php解析xml文件的方法

    最近一段时间在做模板包导入.模板包中包含有xml文件,,需要解析成给定的php数组格式. 我接触到了两种方法,分别是DOMDocument 方法和 simple_load_file. 个人偏好后一种, ...

随机推荐

  1. java 操作命令行

    目的:用java进行调用ab压测 window: cmd ab.exe linux: sh  ab.sh 命令: abs -n 500 -c 10 https://www.baidu.com/ > ...

  2. Andrioid Studio生成jar, aar包

    在Android Studio中对一个自己库进行生成操作时将会同时生成*.jar与*.aar文件.分别存储位置:*.jar:库/build/intermediates/bundles/debug(re ...

  3. Google Gson用法

    the latest version is 2.8.0. If you're using Gradle, add the following line: compile 'com.google.cod ...

  4. bug3 乱码问题

    出现乱码问题是因为各软件之间的编码方式不同导致 1.tomcat修改编码方法: 2.myeclipse中修改编码方式的方法: window----preference ----general----- ...

  5. C++ 实现vector<std:string> 版本

    #include <iostream> #include <vector> #include <memory> #include <thread> #i ...

  6. [postfix]转发邮件设置

    http://stackoverflow.com/questions/22537523/postfix-recipient-bcc-maps-multiple-recipients-how-to ht ...

  7. element ui 栅格布局

    <el-row> <el-col :span="24"><div class="grid-content bg-purple-dark&qu ...

  8. PHP常见数组方法和函数

    current();当前游标指向的数组单元值 next();下一个数组单元值 end()最后一个 reset()复位 prev()把数组指针往前一位 写法:$arr=array('a','b','c' ...

  9. Git之简介及安装

    简介 Git是一个分布式版本控制系统,GitHub相当于一个远程仓库,注册账号可免费获得Git远程仓库. GitHub使用参考:https://guides.github.com/activities ...

  10. gdb查看内存(转)

    可以使用examine命令(简写是x)来查看内存地址中的值.x命令的语 法如下所示: x/<n/f/u> <addr> n.f.u是可选的参数. n是一个正整数,表示需要显示的 ...