(以下文章基本照抄《第一行代码》)

解析XML文件有很多方法,这里主要讲Pull解析和SAX解析。这篇文章主要是讲Pull解析。

一、Pull解析参考代码

先上代码:

private void parseXMLWithPull(String xmlData){
try{
XmlPullParserFactory factory = XmlPullPaeserFactory.newInstance();
XmlPullParser xmlPullParser =
factory.newPullParser();
xmlPullParser.setInput(new StringReader(xmlData));
int eventType =
xmlPullParser.getEventType();
String id = "";
String name = "";
String version = "";
while(eventType != XmlPullParser.END_DOCUMENT){
String nodeName = xmlPullParser.getName();
switch(eventType){
case XmlPullParser.START_TAG:{
if("id".equals(nodeName)){
id = xmlPullParser.nextText();
}else if("name".equals(nodeName)){
name = xmlPullParser.nextText();
}else if("version".equals(nodeName)){
version = xmlPullParser.nextText();
}
break;
}
case XmlPullParser.END_TAG:{
if("app".equals(nodeName){
Log.d("MainActivity","id is " + id);
Log.d("MainActivity","name is " + name);
Log.d("MainActivity","version is " + version);
}
break;
}
default:
break;
}
eventType = xmlPullParser.next();
}
}
}catch(Exception e){
e.printStackTrace();
}
}

二、相关类简述

1、 XmlPullParserFactory 

XmlPullParserFactory 类是用来产生XML Pull解析的实现的。我们需要通过获取XmlPullParserFactory类的实例,来获取XML Pull解析接口的实例

下面是API文档中对XmlPullParserFactory类的描述。

下面是它的方法摘要。

红框内是我们这次用到的方法。

newInstance() 是一个静态方法,作用是产生一个PullParserFactory类的实例。

newPullParser()也是一个静态方法,作用是产生一个XML Pull Parser的实例。

2、XmlPullParser

XmlPullParser不是类,而是一个接口。 XmlPullParser是定义了XMLPULL V1 API中提供的各种解析功能的接口。

这个接口中,两个方法是关键。next() and nextToken() 方法。

next()方法用于获取下一个解析事件。

nextToken()方法和next()方法很类似,但是,如果在input中明确了事件类型,它还可以获取事件类型。

当前解析事件状态可以通过getEventType()方法来获取。

刚开始时,解析事件处于START_DOCUMENT状态。

下面的解析事件类型可以通过next()方法获取。

START_TAG : XML 开始标志被读取。

TEXT : XML中的内容被读取。text的内容可以通过getText()方法来获取。

END_TAG : XML 结束标志被读取。

END_DOCUMENT : 没有更多的事件可以获取。

我们使用XmlPullParser接口对XML文件进行解析的方法和使用cursor读取数据库中的数据是类似的。

先获取当前解析事件的状态,如果当前状态不等于结束,那就通过各种方法检索我们想要的内容,最后再获取下一个解析事件状态,循环判断。

Android之 解析XML文件(1)—— Pull解析的更多相关文章

  1. Pugixml一种快速解析XML文件的开源解析库

    Pugixml是一个轻量级的C++ XML开源解析库,DOM形式的解析器.接口和丰富的遍历和修改操作,快速的解析,此外支持XPath1.0实现数据查询,支持unicode编码: 使用Pugixml可通 ...

  2. Android -- 创建XML文件对象及其序列化, pull解析XML文件

    1. 创建XML文件对象及其序列化 示例代码:(模拟以xml格式备份短信到SD卡) SmsInfo.java, bean对象 /** * 短信的业务bean * @author Administrat ...

  3. JAVA使用SAX解析XML文件

    在我的另一篇文章(http://www.cnblogs.com/anivia/p/5849712.html)中,通过一个例子介绍了使用DOM来解析XML文件,那么本篇文章通过相同的XML文件介绍如何使 ...

  4. 深入浅出如何解析xml文件---上篇

    xml小伙伴们并不陌生,xml是可扩展标记语言,标准通用标记语言语言的子集,是一种用来标记电子文件使其具有结构性的标记语言.我们知道xml可以用dom与sax等方法进行解析,但是xml为什么要解析呢? ...

  5. java解析XML文件四种方法之引入源文件

    1.DOM解析(官方) try { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();         Documen ...

  6. python 解析 XML文件

    如下使用xml.etree.ElementTree模块来解析XML文件.ElementTree模块中提供了两个类用来完成这个目的: ElementTree表示整个XML文件(一个树形结构) Eleme ...

  7. Android pull解析xml文件

    本文介绍android中使用pull来解析xml文件 先自己写一个xml文件,存一些天气信息 <?xml version="1.0" encoding="UTF-8 ...

  8. android——使用pull解析xml文件

    1.persons.xml 将persons.xml文件放到src目录下.其代码如下: <?xml version='1.0' encoding='UTF-8' standalone='yes' ...

  9. [android] 采用pull解析xml文件

    /***********2016年5月6日 更新**********************/ 知乎:Android 中有哪几种解析 xml 的类,官方推荐哪种 ? 以及它们的原理和区别? 刘吉财: ...

  10. Android SAX、DOM、Pull解析xml文件剖析与案例讲解

    XML介绍 XML(Extensible Markup Language) 即可扩展标记语言,与HTML一样,都是SGML(Standard Generalized Markup Language,标 ...

随机推荐

  1. Spring Boot 使用IntelliJ IDEA创建一个web开发实例(三)

    属性配置 1.配置application.properties文件 配置web访问端口和context path server.port = 8081 server.servlet.context-p ...

  2. HEXO与Github.io搭建个人博客

    HEXO与Github.io搭建个人博客 HEXO搭建    HEXO是基于Node.JS的一款简单快速的博客框架,能够支持多线程,支持markdown,可以将生成的静态网页发布到github.io以 ...

  3. java中集合去重1

    //TreeMap 处理 处理后 得到的值 按拼音排序 TreeMap map = new TreeMap(new MaterialComparator()); map.put("东莞&qu ...

  4. /i,/m,/s,/x,/A,/s,/U,/x,/j,/u 等正则修饰符用法~

    i (PCRE_CASELESS) 如果设置了这个修饰符,模式中的字母会进行大小写不敏感匹配. m (PCRE_MULTILINE) 默认情况下,PCRE 认为目标字符串是由单行字符组成的(然而实际上 ...

  5. Mac 10.9x下安装配置phonegap3.0开发环境 (涉及android sdk配置)

    最近突然想弄一下phonegap,之前一直是听说,没亲自配置开发过.结果配置过程非常艰难啊.特别是android平台的配置,那叫一个麻烦,网上搜了半天都没找到非常好的资料.文章也都是抄来抄去,最烦的就 ...

  6. Distance Gym - 102028I (思维)

    题目链接:https://cn.vjudge.net/problem/Gym-102028I 具体思路:首先我们选定左边界和右边界.然后每一次按照左边一个,第二次右边一个的规律往上就可以了 具体原因: ...

  7. Aragorn's Story 树链剖分+线段树 && 树链剖分+树状数组

    Aragorn's Story 来源:http://www.fjutacm.com/Problem.jsp?pid=2710来源:http://acm.hdu.edu.cn/showproblem.p ...

  8. java反序列化漏洞

    http://www.freebuf.com/vuls/86566.html 有时间了  仔细阅读

  9. ip_rcv && ip_rcv_finish

    (1) 在inet_init中注册了类型为ETH_P_IP协议的数据包的回调ip_rcv (2) 当二层数据包接收完毕,会调用netif_receive_skb根据协议进行向上层分发 (3) 类型为E ...

  10. 如何读懂statspack报告

    前言:这篇文章是我从网上找到的,但可惜不知道是哪位大侠写(译)的,因此这里无法注明了.仔细看了看,这篇文章对初学者应该很有帮助,写的比较详细,通俗易懂,因此整理一下,便于阅读:内容略有调整,不单做调整 ...