XML介绍:Extensible Markup Language,即可扩展标记语言

一、概述

Android中解析XML格式数据大致有三种方法:

SAX

DOM

PULL

二、详解

2.1 SAX

SAX(Simple API for XML) 使用流式处理的方式,它并不记录所读内容的相关信息。

它是一种以事件为驱动的XML API,解析速度快,占用内存少。使用回调函数来实现。

缺点是不能倒退。

2.2 DOM

DOM(Document Object Model) 是一种用于XML文档的对象模型,可用于直接访问 XML 文档的各个部分。

它是一次性全部将内容加载在内存中,生成一个树状结构,它没有涉及回调和复杂的状态管理。

缺点是加载大文档时效率低下。

2.3 PULL

Pull 内置于 Android 系统中。也是官方解析布局文件所使用的方式。

Pull 与 SAX 有点类似,都提供了类似的事件,如开始元素和结束元素。

不同的是,SAX 的事件驱动是回调相应方法,需要提供回调的方法,而后在 SAX 内部自动调用相应的方法。

而Pull解析器并没有强制要求提供触发的方法。因为他触发的事件不是一个方法,而是一个数字。它使用方便,效率高。

三、比较

SAX、DOM、Pull 的比较:

内存占用:SAX、Pull比DOM要好;

编程方式:SAX 采用事件驱动,在相应事件触发的时候,会调用用户编好的方法,也即每解析一类 XML,就要编写一个新的适合该类XML的处理类。DOM 是 W3C 的规范,Pull 简洁。

访问与修改:SAX 采用流式解析,DOM 随机访问。

访问方式:SAX,Pull 解析的方式是同步的,DOM 逐字逐句。

四、使用举例

4.1 SAX 解析举例

4.2 DOM 解析举例

public class DomPersonService {

/**

* @param inStream

* @return

* @throws Exception

*/

public static List getPersons(InputStream inStream)

throws Exception {

List persons = new ArrayList();

/**

* 文檔的解析

*/

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

DocumentBuilder builder = factory.newDocumentBuilder();

Document document = builder.parse(inStream);

/**

* 操作對象樹

*/

Element root = document.getDocumentElement();//返回文檔的根元素

NodeList personNodes = root.getElementsByTagName("person");

for (int i = 0; i < personNodes.getLength(); i++) {

Element personElement = (Element) personNodes.item(i);

int id = new Integer(personElement.getAttribute("id"));

Person person = new Person();

person.setId(id);

NodeList childNodes = personElement.getChildNodes();

for (int y = 0; y < childNodes.getLength(); y++) {

if (childNodes.item(y).getNodeType() == Node.ELEMENT_NODE) {

if ("name".equals(childNodes.item(y).getNodeName())) {

String name = childNodes.item(y).getFirstChild()

.getNodeValue();

person.setName(name);

}

else if ("age".equals(childNodes.item(y).getNodeName())) {

String age = childNodes.item(y).getFirstChild()

.getNodeValue();

person.setAge(new Short(age));

}

}

}

persons.add(person);

}

inStream.close();

return persons;

}

}

public void testDOMGetPersons() throws Throwable {

InputStream inStream = this.getClass().getClassLoader()

.getResourceAsStream("person.xml");

List persons = DomPersonService.getPersons(inStream);

for (Person person : persons) {

Log.i(TAG, person.toString());

}

}

4.3 PULL解析举例

public class PullPersonService {

/**

* ------------------------使用PULL解析XML-----------------------

* @param inStream

* @return

* @throws Exception

*/

public static List getPersons(InputStream inStream)

throws Exception {

Person person = null;

List persons = null;

XmlPullParser pullParser = Xml.newPullParser();

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

int event = pullParser.getEventType();// 觸發第一個事件

while (event != XmlPullParser.END_DOCUMENT) {

switch (event) {

case XmlPullParser.START_DOCUMENT:

persons = new ArrayList();

break;

case XmlPullParser.START_TAG:

if ("person".equals(pullParser.getName())) {

int id = new Integer(pullParser.getAttributeValue(0));

person = new Person();

person.setId(id);

}

if (person != null) {

if ("name".equals(pullParser.getName())) {

person.setName(pullParser.nextText());

}

if ("age".equals(pullParser.getName())) {

person.setAge(new Short(pullParser.nextText()));

}

}

break;

case XmlPullParser.END_TAG:

if ("person".equals(pullParser.getName())) {

persons.add(person);

person = null;

}

break;

}

event = pullParser.next();

}

return persons;

}

}

public void testPullGetPersons() throws Throwable {

InputStream inStream = this.getClass().getClassLoader()

.getResourceAsStream("person.xml");

List persons = PullPersonService.getPersons(inStream);

for (Person person : persons) {

Log.i(TAG, person.toString());

}

}

Android中解析JSON格式数据常见方法合集

待解析的JSON格式的文件如下: [{"id":"5", "version":"1.0", "name&quo ...

android 中解析json格式数据

本文来自http://tonysun3544.iteye.com/category/188238 package com.tony.json; import android.app.Activity; ...

iOS开发之解析XML格式数据

XML格式的数据是一种数据的传输格式.因为它方便编写.结构清晰,所以深受程序猿的喜爱,非常多人都喜欢使用XML格式数据传输或者作为程序的配置信息. 如今我将来实如今iOS中解析XML格式数据,语言使用 ...

&lbrack;置顶&rsqb; Android学习系列-Android中解析xml(7)

Android学习系列-Android中解析xml(7) 一,概述 1,一个是DOM,它是生成一个树,有了树以后你搜索.查找都可以做. 2,另一种是基于流的,就是解析器从头到尾解析一遍xml文件.   ...

实现android上解析Json格式数据功能

实现android上解析Json格式数据功能,该源码转载于安卓教程网的,http://android.662p.com ,个人感觉还不错的,大家可以看看一下吧. package com.practic ...

解析XML格式数据

学习解析XML格式的数据前,搭建一个简单的web服务器,在这个服务器上提供xml文本用于练习. 一.搭建Apache服务器 在Apache官网下载编译好的服务器程序,安装.对于Windows来说127 ...

android 中解析XML的方法&lpar;转&rpar;

在XML解析和使用原始XML资源中都涉及过对XML的解析,之前使用的是 DOM4J和 XmlResourceParser 来解析的.本文中将使用XmlPullParser来解析,分别解析不同复杂度的t ...

Android中解析XML

XML在各种开发中都广泛应用,Android也不例外.作为承载数据的一个重要角色,如何读写XML成为Android开发中一项重要的技能.今天就由我向大家介绍一下在Android平台下几种常见的XML解 ...

Java中解析XML的四种方法

XML现在已经成为一种通用的数据交换格式,它的平台无关性,语言无关性,系统无关性,给数据集成与交互带来了极大的方便.对于XML本身的语法知识与技术细节,需要阅读相关的技术文献,这里面包括的内容有DOM ...

随机推荐

Poj2479 &amp&semi; Poj 2593

就是按着DP的思路来做的,结果还是想不到.T_T,行了,别玻璃心了,继续. 这道题目是求在一列数里,由两部分子段和组成的最大和.即对于连续整数组成的串 S1.S2,使 S1 + S2 的和最大. 题目 ...

Waves – 赞!超炫交互体验的点击动画效果

Waves 点击效果的灵感来自于谷歌的材料设计,很容易使用.只需要引入 waves.min.css 和 waves.min.js 到 HTML 文件中可以使用了.采用 touchstart 与 tou ...

bash的一些小技巧

1.从输入读入变量 eg:read -ep "input yes or no: " flag 用e选项表示编辑,可以使用backspace删除 2.数组 a.索引数组 declar ...

VS 6&period;00 工程项目文件详解

*.dsp(DeveloperStudio Project):是VC++的工程配置文件,比如说你的工程包含哪个文件,你的编译选项是什么等等,编译的时候是按照.dsp的配置来的.*.dsw(Develo ...

javascript中for&sol;in循环及使用技巧

JavaScript 支持不同类型的循环: for - 循环代码块一定的次数 for/in - 循环遍历对象的属性 while - 当指定的条件为 true 时循环指定的代码块 do/while - ...

Java课程设计博客(团队)

Java课程设计博客(团队) 1. 团队/项目名称 使用JAVA实现简易HTTP服务器 2. 团队成员 组长:林一心 组员:张杭镖 3. 项目git地址 https://github.com/oran ...

asp&period;net mvc 记录Action耗时

可能有些时候需要记录Action的执行时间来优化系统功能,这时可以用过滤器来实现. 新建项目 项目名称随便取 身份验证:不进行身份验证 安装Nlog 这里使用NLog来输出日志,具体使用说明请看:ht ...

C&num; bootstrap之表格动态绑定值

这段时间研究了下bootstrap,打算从表格开始学习,实现动态绑定值,在网上找了挺多例子,但是很少有写全的,要不就太复杂,实现效果后总结一下,直接拷贝过去可以用. 第一步:先去官网上下载bootst ...

和嗲妹妹面试python,是种什么体验?

这次给大家讲讲我2年前去爱奇艺面试高级运维开发岗位的经历,希望对大家带来一些帮助. 公众号「Python专栏」后台回复:自动化运维平台,获取整套自动化运维平台的源代码 聊骚阶段 嗲妹妹:你好,我是爱奇 ...

Oracle 三大范式

范式:数据库设计对数据的存储性能,还有开发人员对数据的操作都有莫大的关系.所以建立科学的,规范的的数据库是需要满足一些.规范的来优化数据数据存储方式.在关系型数据库中这些规范. 第一范式:数据库表中的 ...

Android解析xml的方法,Android中解析XML格式数据的方法相关推荐

  1. python中plot实现即时数据动态显示方法_python中plot实现即时数据动态显示方法

    在Matlab使用Plot函数实现数据动态显示方法总结中介绍了两种实现即时数据动态显示的方法.考虑到使用python的人群日益增多,再加上本人最近想使用python动态显示即时的数据,网上方法很少,固 ...

  2. python中json模块_Python使用内置json模块解析json格式数据的方法

    本文实例讲述了Python使用内置json模块解析json格式数据的方法.分享给大家供大家参考,具体如下: Python中解析json字符串非常简单,直接用内置的json模块就可以,不需要安装额外的模 ...

  3. 运行tomcat时,解析 HTTP 请求 header 错误 Note: further occurrences of HTTP 在方法名称中发现无效的字符串, HTTP 方法名必须是有效的符号

    启动成功后报错 org.apache.coyote.http11.Http11Processor.service 解析 HTTP 请求 header 错误 Note: further occurren ...

  4. 信息: 解析 HTTP 请求 header 错误 java.lang.IllegalArgumentException: 在方法名称中发现无效的字符串, HTTP 方法名必须是有效的符号.

    信息: 解析 HTTP 请求 header 错误 Note: further occurrences of HTTP request parsing errors will be logged at ...

  5. java+解析未知json_在Java中解析JSON时如何忽略未知属性– Jackson @JsonIgnoreProperties注释示例...

    java+解析未知json 使用Jackson API在Java中解析JSON时的常见问题之一是,当您的JSON包含未知属性(即您的Java类没有对应于所有JSON属性的所有字段)时,该操作将失败. ...

  6. php使用 js格式解析,JavaScript解析JSON格式数据的方法示例

    本文实例讲述了JavaScript解析JSON格式数据的方法.分享给大家供大家参考,具体如下: 1.使用JavaScript提供的eval()函数function JsonText1() { var ...

  7. Qt 中获取摄像头图像数据的方法

    Qt 中获取摄像头图像数据的方法 在 Qt 中提供了 QCamera 类用来操作摄像头.(这里的摄像头指的是电脑上常用的那种 USB 摄像头或网络摄像头,暂时还不支持工业相机.)摄像头获取的实时图像可 ...

  8. java中无效字符串,ava.lang.IllegalArgumentException: 在方法名称中发现无效的字符串, HTTP 方法名必须是有效的符号...

    问题: 信息: 解析 HTTP 请求 header 错误注意:HTTP请求解析错误的进一步发生将记录在DEBUG级别. java.lang.IllegalArgumentException: 在方法名 ...

  9. xml python gb2312_使用Python处理XML格式数据的方法介绍

    本文实例讲述了Python处理XML格式数据的方法.分享给大家供大家参考,具体如下: 这里的操作是基于Python3平台. 在使用Python处理XML的问题上,首先遇到的是编码问题. Python并 ...

最新文章

  1. FDMemTable 数据集
  2. CVPR 2018 DEDT:《Efficient Diverse Ensemble for Discriminative Co-Tracking》论文笔记
  3. I NEED A OFFER!
  4. 存储过程语法 - 变量
  5. 使用Angular的http client发送请求,请求response总是被当成json类型处理
  6. IEumberable和IQueryable的区别
  7. springboot拦截异常信息发送邮件提醒
  8. 浅谈Hybrid技术的设计与实现第二弹
  9. 去掉 iOS 导航栏返回按钮文本三种方案
  10. 统计学基本概念(及辨异)
  11. python 列表、字典
  12. 阮一峰ES6入门学习笔记~~变量的解构赋值
  13. 人工智能表格票据识别-要素信息自动识别提取
  14. 冲突域和广播域区别,集线器、交换机和路由器对比
  15. RFID射频识别技术
  16. Datawhale组队学习周报(第042周)
  17. C语言源码实现俄罗斯方块
  18. C#制作简陋英语背作文辅助小软件
  19. 1.js基础01-计算机基础
  20. 用互联网思维去做事之-(2)用户思维

热门文章

  1. Javascript创建沙箱
  2. 1998考研阅读Text3翻译
  3. FPGA开发与ARM(单片机)开发的区别
  4. 加深讲解 L4 L7 调度跟apiserver通信
  5. 一文读懂基金运作:一只公募基金的运营之旅
  6. 卡梅隆大学计算机排名,2022卡梅隆大学全美排名多少(研究生院)
  7. 【PTA】7-10 阿生的粉丝团 (30 分)
  8. 2016大连理工大学计算机考研经验
  9. Web开发人员需知的Web缓存知识
  10. TokenInsight官网上线BTC永续合约流动性实时数据 | TokenInsight