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

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

一、Pull解析参考代码

先上代码:

  1. private void parseXMLWithPull(String xmlData){
  2. try{
  3. XmlPullParserFactory factory = XmlPullPaeserFactory.newInstance();
  4. XmlPullParser xmlPullParser = factory.newPullParser();
  5. xmlPullParser.setInput(new StringReader(xmlData));
  6. int eventType = xmlPullParser.getEventType();
  7. String id = "";
  8. String name = "";
  9. String version = "";
  10. while(eventType != XmlPullParser.END_DOCUMENT){
  11. String nodeName = xmlPullParser.getName();
  12. switch(eventType){
  13. case XmlPullParser.START_TAG:{
  14. if("id".equals(nodeName)){
  15. id = xmlPullParser.nextText();
  16. }else if("name".equals(nodeName)){
  17. name = xmlPullParser.nextText();
  18. }else if("version".equals(nodeName)){
  19. version = xmlPullParser.nextText();
  20. }
  21. break;
  22. }
  23. case XmlPullParser.END_TAG:{
  24. if("app".equals(nodeName){
  25. Log.d("MainActivity","id is " + id);
  26. Log.d("MainActivity","name is " + name);
  27. Log.d("MainActivity","version is " + version);
  28. }
  29. break;
  30. }
  31. default:
  32. break;
  33. }
  34. eventType = xmlPullParser.next();
  35. }
  36. }
  37. }catch(Exception e){
  38. e.printStackTrace();
  39. }
  40. }

二、相关类简述

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. Python学习笔记(三十三)常用内置模块(2)collections_namedtuple_deque_defaultdict_OrderedDict_Counter

    摘抄自:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431953239 ...

  2. 垂直居中vertical-align

    vertical-align对一些特定显示样式(例如单元格显示方式:table-cell)的元素才会起作用. div{display:table-cell; vertical-align:middle ...

  3. Linux 操作系统下 VI 编辑器常用命令详细介绍

    一.Vi 简介 vi是unix世界中最通用的全屏编辑器,linux中是用的是vi的加强版vim,vim同vi完全兼容,vi就是"visual interface"的缩写.它可以执行 ...

  4. 天梯赛L2-008 最长对称子串 (字符串处理)

    对给定的字符串,本题要求你输出最长对称子串的长度.例如,给定"Is PAT&TAP symmetric?",最长对称子串为"s PAT&TAP s&quo ...

  5. 使用vscode实现git同步

    用了git最方便的就是项目同步管理,回到家打开vscode只需要点击一下pull就能全部同步过来.是不是很方便....毕竟之前我都是拿u盘拷贝回家或者存到云盘再下载下来..   我这里之前用的是国内的 ...

  6. windows程序设计.第一个windos程序

    Windows程序设计(第5版) windows程序需要调用API. 第一个Windows程序 /*HelloMsg.c -- Displays "Hello World!" in ...

  7. Sqlmap与burpsuite动态更新某些参数

    有如下注入点: http://localhost/id=1&order_nu=1 情况说明: id为注入点,  每一次注入时, order_nu不能跟上次的一样(假说这个order_nu为一个 ...

  8. Mysql储存过程8:repeat循环

    语法: repeat SQL until 条件 end repeat; 就是相当于其他语言中的: do{ # }while(); mysql> create procedure p1p() -& ...

  9. sqlite3_get_table()

    { sqlite3 *db; char *errmsg=NULL;    //用来存储错误信息字符串 char ret=0; int my_age=0;    //类型根据要提取的数据类型而定 cha ...

  10. geoip 扩展包根据ip定位详情

    教程:https://laravel-china.org/courses/laravel-package/2024/get-the-corresponding-geo-location-informa ...