Android之 解析XML文件(1)—— Pull解析
(以下文章基本照抄《第一行代码》)
解析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解析的更多相关文章
- Pugixml一种快速解析XML文件的开源解析库
Pugixml是一个轻量级的C++ XML开源解析库,DOM形式的解析器.接口和丰富的遍历和修改操作,快速的解析,此外支持XPath1.0实现数据查询,支持unicode编码: 使用Pugixml可通 ...
- Android -- 创建XML文件对象及其序列化, pull解析XML文件
1. 创建XML文件对象及其序列化 示例代码:(模拟以xml格式备份短信到SD卡) SmsInfo.java, bean对象 /** * 短信的业务bean * @author Administrat ...
- JAVA使用SAX解析XML文件
在我的另一篇文章(http://www.cnblogs.com/anivia/p/5849712.html)中,通过一个例子介绍了使用DOM来解析XML文件,那么本篇文章通过相同的XML文件介绍如何使 ...
- 深入浅出如何解析xml文件---上篇
xml小伙伴们并不陌生,xml是可扩展标记语言,标准通用标记语言语言的子集,是一种用来标记电子文件使其具有结构性的标记语言.我们知道xml可以用dom与sax等方法进行解析,但是xml为什么要解析呢? ...
- java解析XML文件四种方法之引入源文件
1.DOM解析(官方) try { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); Documen ...
- python 解析 XML文件
如下使用xml.etree.ElementTree模块来解析XML文件.ElementTree模块中提供了两个类用来完成这个目的: ElementTree表示整个XML文件(一个树形结构) Eleme ...
- Android pull解析xml文件
本文介绍android中使用pull来解析xml文件 先自己写一个xml文件,存一些天气信息 <?xml version="1.0" encoding="UTF-8 ...
- android——使用pull解析xml文件
1.persons.xml 将persons.xml文件放到src目录下.其代码如下: <?xml version='1.0' encoding='UTF-8' standalone='yes' ...
- [android] 采用pull解析xml文件
/***********2016年5月6日 更新**********************/ 知乎:Android 中有哪几种解析 xml 的类,官方推荐哪种 ? 以及它们的原理和区别? 刘吉财: ...
- Android SAX、DOM、Pull解析xml文件剖析与案例讲解
XML介绍 XML(Extensible Markup Language) 即可扩展标记语言,与HTML一样,都是SGML(Standard Generalized Markup Language,标 ...
随机推荐
- Python学习笔记(三十三)常用内置模块(2)collections_namedtuple_deque_defaultdict_OrderedDict_Counter
摘抄自:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431953239 ...
- 垂直居中vertical-align
vertical-align对一些特定显示样式(例如单元格显示方式:table-cell)的元素才会起作用. div{display:table-cell; vertical-align:middle ...
- Linux 操作系统下 VI 编辑器常用命令详细介绍
一.Vi 简介 vi是unix世界中最通用的全屏编辑器,linux中是用的是vi的加强版vim,vim同vi完全兼容,vi就是"visual interface"的缩写.它可以执行 ...
- 天梯赛L2-008 最长对称子串 (字符串处理)
对给定的字符串,本题要求你输出最长对称子串的长度.例如,给定"Is PAT&TAP symmetric?",最长对称子串为"s PAT&TAP s&quo ...
- 使用vscode实现git同步
用了git最方便的就是项目同步管理,回到家打开vscode只需要点击一下pull就能全部同步过来.是不是很方便....毕竟之前我都是拿u盘拷贝回家或者存到云盘再下载下来.. 我这里之前用的是国内的 ...
- windows程序设计.第一个windos程序
Windows程序设计(第5版) windows程序需要调用API. 第一个Windows程序 /*HelloMsg.c -- Displays "Hello World!" in ...
- Sqlmap与burpsuite动态更新某些参数
有如下注入点: http://localhost/id=1&order_nu=1 情况说明: id为注入点, 每一次注入时, order_nu不能跟上次的一样(假说这个order_nu为一个 ...
- Mysql储存过程8:repeat循环
语法: repeat SQL until 条件 end repeat; 就是相当于其他语言中的: do{ # }while(); mysql> create procedure p1p() -& ...
- sqlite3_get_table()
{ sqlite3 *db; char *errmsg=NULL; //用来存储错误信息字符串 char ret=0; int my_age=0; //类型根据要提取的数据类型而定 cha ...
- geoip 扩展包根据ip定位详情
教程:https://laravel-china.org/courses/laravel-package/2024/get-the-corresponding-geo-location-informa ...