Android学习xml解析大全之SAX和DOM

  随着android的学习解析xml成为了很多朋友面临的问。想学习如何解析xml就要先了解xml是什么。

XML称为可扩展标记语言(Extensible Markup Language),由标准通用标记语言(SGML:Standard Generalized Markup Language)发展而来,允许开发者自定义标签,可以实现标签和内容的有效分离。

  与HTML不同,XML不再侧重于数据如何表现,而是更多的关注数据如何存储和传输。因此,XML逐渐演变成为一种跨平台的数据交换格式。通过使用XML,开发者可以在不同平台、不同系统之间进行数据交换。除此之外,还可以使用XML作为配置文件,将应用程序状态保存到XML文件中,而无须使用关系型数据库。

目前常用的两种解析xml的方式:DOM SAX
二者区别
     DOM 通过标准接口将文档读入内存,
优点是可以随机访问xml中每个元素。
缺点是一次性读入整个文档到内存中,整个DOM树常驻内存,导致系统开销过大。
     SAX 采用时间驱动机制来解析xml文档。通过开发者编写的事件监听器来获取XML信息。
优点是解析方式占用内存小处理速度快。
缺点是采用顺序模式来读取xml,因此无法做到随机读取文档中的任意元素。
    JAXP(java API for xml)JAXP是建立在DOM和SAX之上的一个抽象层,它既没有提供解析XML的新方法,也没有对DOM和SAX进行任何扩展,仅仅只是提供了一种工厂模式,允许应用程序在不同的XML解析器之间切换。

SAX解析器

  JAXP为SAX解析器提供了以下的2组API。

  (1)XMLReader和XMLReaderFactory:XMLReaderFactory工程类的creatXMLReader()静态方法用于创建XMLReader。

  (2)SAXParser和SAXParserFactory:SAXParserFactory工厂类的newSAXParser()实例方法用于创建SAXParser。

  以上两组API中的XMLReader和SAXParser都是SAX解析器,它们都定义了多个parser()方法,用于以SAX方式解析XML文档。

  其中,XMLReader提供了如下2个用于解析XML文档的parser()方法。

  (1)void parse(InputSource input);   //解析InputSource输入源中的XML文档

  (2)void parse(String systemId);    //解析系统URI指定的XML文档

  SAXParser则提供了如下4个用于解析XML文档的parser()方法。

  (1)void parse(File f, DefaultHandler dh);         //解析f文件所代表的XML文档

  (2)void parse(InputSource is, DefaultHandler dh);    //解析InputSource输入源中的XML文档

  (3)void parse(InputStream is, DefaultHandler dh);   //解析InputStream输入源中的XML文档

  (4)void parse(String uri, DefaultHandler dh);       //解析系统URI指定的XML文档

  可以看出,在SAXParser的parser()方法中,第二个参数是一个DefaultHandler对象,该对象就是用于监听SAX解析事件的监听器。

SAX的监听器
(1)ContentHandler:坚挺xml文档内容处理事件
(2)DTDHandler:监听DTD事件的监听器
(3)EntityResolver 监听实体处理事件
(4)ErrorHandler 监听错误
JAXP提供了DefaultHandler类来实现监听。DefaultHandler类实现了ContentHandler、DTDHandler、EntityResolver和ErrorHandler接口,并为这些接口中所包含的方法提供了空实现。因此,开发者只需要编写一个继承自DefaultHandler的类,并重写自己所关心的监听方法,而无须为每个方法都提供实现。

SAX解析xml文档的一般步骤

(1)通过SAXParserFactory的newInstance()方法创建SAXParserFactory对象(SAX解析器工厂)
(2)通过SAXParserFactory对象的newSAXParser()创建SAXParser对象(SAX解析器)
(3) 通过SAXParser对象的parser()方法解析xml文档,该方法的第二个参数要传入一个DefaultHandler对象

综上,附上代码供大家参考:

1.DOM树中的对象类型

  使用DOM解析XML文档时,整个XML文档会被转换成一颗DOM树,DOM解析器会将XML文档的节点对应转化成DOM树的每个节点。

  DOM树不仅可以描述XML文档的结构化特征,而且具有对象模型的特征,将XML文档转换成DOM树的过程,就是将文档模型对象化的过程。

2.DOM解析器(与SAX解析器类似)

  通过以下三个步骤可以实现DOM解析器的创建,并完成XML文档模型对象化的过程。

  (1)通过调用DocumentBuilderFactory类的newInstance()方法,创建一个DOM解析器工厂对象。

  (2)通过调用DOM解析器工厂对象的newDocumentBuilder()方法,创建一个DOM解析器对象。

  (3)通过调用DOM解析器对象的parse()方法,完成文档模型对象化的过程,将XML文档解析成Document文档对象。

附上代码:

综上所诉,大家对xml的解析肯定有了一定的了解,但想真正学会如何使用xml还要用心继续学习。加油。(本文参考了“依旧淡然”的相关片段,并在此基础上整理加上个人的理解,希望对大家有用)

Android学习xml解析大全之SAX和DOM

时间: 2024-08-15 14:59:58

Android学习xml解析大全之SAX和DOM的相关文章

Android实现XML解析技术

http://www.cnblogs.com/hanyonglu/archive/2012/02/28/2370675.html http://weizhulin.blog.51cto.com/1556324/311678 Android实现XML解析技术

Android 之xml解析

HTTP网络传输中的数据组织方式有三种方式:1.HTML方式2.XML方式 3.JSON方式 XML称为可扩展标记语言,它与HTML一样,都是SGML(标准通用标记语言) XML是Internet环境中跨平台的,依赖于内容技术,是当前处理结构化文档信息的有力工具,可扩展标记语言XML是一种简单的数据存储语言,使用一系列简单的标记描述数据. xml文件的节点的种类,一种是ElementNode,一种是TextNode.像<persons>.<person>这种节点就属于Element

Android中XML解析-PULL解析

前面写了两篇XML解析的Dom和SAX方式,Dom比较符合思维方式,SAX事件驱动注重效率,除了这两种方式以外也可以使用Android内置的Pull解析器解析XML文件. Pull解析器的运行方式与 SAX 解析器相似,也是事件触发的.Pull解析方式让应用程序完全控制文档该怎么样被解析,比如开始和结束元素事件,使用parser.next()可以进入下一个元素并触发相应事件.通过Parser.getEventType()方法来取得事件的代码值,解析是在开始时就完成了大部分处理.事件将作为数值代码

Android学习资源网站大全

https://github.com/zhujun2730/Android-Learning-Resources 整理了一些 Android 的博客链接.学习资源网站.站在巨人的肩膀上,会看得更远.整理这一份资源也方便更多的Android开发者能享受到技术分享的力量.首先,在这里要感谢所有开源项目的作者,感谢Trinea,CodeKK,张明云,胡凯等等大大无私的技术分享,感谢所有乐于分享学习经验的人.最后,若有侵权,请联系本人,本人将及时删除侵权内容. #目录 1.官方学习资源[推荐必看] 2.

Android中XML解析-Dom解析

Android中需要解析服务器端传过来的数据,由于XML是与平台无关的特性,被广泛运用于数据通信中,有的时候需要解析xml数据,格式有三种方式,分别是DOM.SAX以及PULL三种方式,本文就简单以Dom解析为例,解析XML, DOM方式解析xml是先把xml文档都读到内存中,然后再用DOM API来访问树形结构,并获取数据的,但是这样一来,如果xml文件很大,手机CPU处理能力比PC差,因此在处理效率方面就相对差了,使用Dom解析就不是太合适了. 基础维护 首先下assets目录下新建一个Bo

Android 简易XML解析

首先创建在Android工程中创建一个Assets文件夹 app/src/main/assets 在这里添加一个名为 data.xml的文件,然后编辑这个文件,加入如下XML格式内容 <?xml version="1.0" encoding="utf-8"?> <apps> <app> <id>1</id> <name>Google Maps</name> <version&g

Android中XML解析

package com.example.thebroadproject; public class Book { private int id; private String name; private float price; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setN

android之XML解析

所谓SAX,就是SAX simple API for XML,是一个解析XML文件的简单API. SAX解析XML的工作原理,是对文档进行顺序扫描,当扫描到文档开始与结束,元素开始与结束,触发相应的响应函数.是一种事件驱动型的解析方式.它可以在解析文档的任意时刻停止解析. 通过该图我们可以大概了解解析的过程. private void parse(String xmlString,List<Mp3Info> infos){ // SAXParserFactory 是一个使用工厂模式的类 SAX

Android自定义xml解析

<?xml version="1.0" encoding="utf-8"?> <resources> <Users> <User name="jason" age="12" location="Beijing"/> <User name="peter" age="18" location="Shangha