Android读写XML(中)——SAX

转载 2011年01月24日 14:58:00

本文转载自:http://www.moandroid.com/?p=821,如有转载请声明!

 

Android读写XML(上)——package说明中,详细介绍了使用 DOM方法读取XML文档,由于使用DOM方法需要将整个XML文档加载内存中,对系统资源占用比较多,这对内存比较紧张的Android系统来说,使用DOM方法读取XML文档会有很大的限制。 使用SAX方法读取XML,对内存资源的占用的比较少,因此在嵌入式设备中极力推荐使用,Android也不例外,本篇幅详细说明Android中如何使用SAX读取XML文档。

SAX采用基于事件驱动的处理方式,它将XML文档转换成一系列的事件,由单独的事件处理器来决定如何处理。为了了解如何使用SAX API处理XML文档,这里介绍一下SAX所使用的基于事件驱动的处理模式。

基于事件驱动的处理模式

基于事件的处理模式主要围绕着事件源以及事件处理器来工作的。一个可以产生事件的对象被称为事件源,而可以对事件产生响应的对象就被叫做事件处理器。事件源与事件处理对象是通过在事件源中的事件注册方法连接的。当事件源产生时间后,调用事件处理器相应的方法,一个事件获得处理。当在事件源调用事件处理器中特定方法的时候,会传递个事件标志以及其响应事件的状态信息,这样事件处理器才能够根据事件信息来决定自己的行为。

在SAX接口中,事件源是org.xml.sax包中的XMLReader,它通过parser()方法来开始解析XML文档,并根据文档的内容产生事件。而事件处理器则是org.xml.sax包中的ContentHander、DTDHander、ErrorHandler,以及EntityResolver这4个接口,它们分别处理事件源在解析XML文档过程中产生的不同种类的事件。而事件源XMLReader与这4个事件处理器的连接是通过在XMLReader中的相应事件处理器注册方法setXXXX()来完成的,详细介绍请见下表:
SAXHanlder
以上的4个事件源处理器接口,在开发中没有必要直接从这4个接口直接继承,因为org.xml.sax.helper包为我们提供了类DefaultHandler,其继承了这4个个接口,在实际开发中直接从DefaultHandler继承并实现相关函数就可以了。在这4个接口中,最重要的是ContentHanlder接口,下面就其中的方法加以说明,如下:
ContentHanlder

以上就是解析一个XML文档,事件处理的过程。这里我们对org.xml.sax.XMLReader中的方法做下补充说明:除了前面介绍的一系列事件处理器注册方法set/getXXXX()外,还有个重要的函数:parse(InputSource input)–Parse an XML document,开始解析一个XML文档。

按照应用程序开发的流程,简要介绍下SAX的使用方法

  1. 首先,编写了解XML文档的结构,按照XML文档的结构,编写具体的数据结构,类似于:XXXXList,XXXXItem,最好与XML的文档保持一致。
  2. 其次,开始实现事件处理对象,Android SDK为我们提供了DefaultHandler,其继承了ContentHandler 、DTDHandler、 EntityResolver、 ErrorHandler的所有接口。我们在DefaultHandler的基础上,按照需求实现ContentHanlder的所有接口,这里需要注意2个方面的问题:
    1. 事件处理的顺序,处理时间的位置:一般在startDocument()初始化工作,在endDocument()中收尾的处理工作;startElement()—characters()—endDocument()是一个XML节点读取的过程,startElement()用来初始判断,characters()获取节点的字符数据,endDocument()将数据写入数据结构。
    2. 异常SAXException的处理;
  3. 然后,XML实体解析,过程如下:
    SAXParserFactory factory = SAXParserFactory.newInstance();
    SAXParser parser = factory.newSAXParser();
    XMLReader xmlreader = parser.getXMLReader();
    URL rrl = new URL(urlstring);
    InputSource is = new InputSource(url.openStream());
    Xmlreader.setContentHanlder(XXXX);
    Xmlreader.parse(is);
  4. 最后,在Activity中显示数据,一般先将XML中读取的数据,选择合适的Adaper对数据进行封装,然后使用ListView控件来显示数据。

以上就是SAX读取XML的过程,并显示出最终的数据。以上需要注意的是SAXParserFactory ,SAXParser类来自 javax.xml.parsers包中。

总结说明

SAX读取XML文档的方法,占用内存比较少,但是开发流程相比DOM就复杂多了,具体采用哪种方法比较合适,大家可以在开发的过程中来深刻体会之间的差别。

 

相关文章推荐

SAX--XML文件读写

  • 2014年07月22日 17:48
  • 2.35MB
  • 下载

DOM、SAX、JDOM、DOM4J读写xml文档

  • 2015年12月04日 19:42
  • 16KB
  • 下载

XML读写之SAX

本文先使用DSAX方式写一个简单地小例子,亲测可以运行,然后在末尾分析其优缺点。 1.准备 新建一个Java Project 新建一个Java类名称为SAXTest.java 新建一个Java类...

android开发之xml文件操作——SAX

  • 2011年01月02日 19:40
  • 54KB
  • 下载

学习笔记 安卓常用的XML文件读写方式--pull,Dom,SAX

DOM解析和SAX解析,在与java中的 一样。 我们现在要说的是android独有的方式:Pull解析器 pull解析器和SAX的解析方式类似,都是基于事件触发的。 创建一般过程:、 1.可...

Java与XML读写之SAX篇

我们还是沿用讲DOM的时候使用的那个文档例子,但首先,我们先看一个简单一些的应用,我们希望能够统计一下XML文件中各个标签出现的次数。这个例子很简单,但是足以阐述SAX编程的基本思路了。...

Dom,SAX,JAXP,DOM4J读写XML文件

本文来自于163.com/blog/static/9732381120118303351185/ 使用DOM读取XML文件: package test; import java.io.File; i...

用SAX、DOM、JDOM和DOM4J读写XML文件

package com.mipo.xml.demo1; import java.io.File; import java.io.FileWriter; import java.io.IOExcept...

Android读写XML(上)——package说明

XML 经常用作 Internet 上的一种数据格式,其文件格式想必大家都比较清楚,在这里我结合Android平台,来说明Android SDK提供的读写XML的package。首先介绍下Androi...

Android开发8——利用pull解析器读写XML文件

一、基本介绍 对XML解析有SAX和DOM等多种方式,Android中极力推荐xmlpull方式解析xml。xmlpull不仅可用在Android上同样也适用于javase,但在javase环境...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android读写XML(中)——SAX
举报原因:
原因补充:

(最多只允许输入30个字)