转载:
http://blog.sina.com.cn/s/blog_5de48f8b0100dbtp.html
昨天我们学习了使用 DOM 解析 XML 文档,都知道在使用 DOM 解析 XML 文档时,需要读取整个 XML 文档,然后在内存中创建 DOM 树,生成 DOM 树上的每个节点对象,只有在整个 DOM 树创建完成后,才能做需要的修改操作,即使是只需要修改根元素节点的第一个子节点。当 XML 文档较大时,构建 DOM 树将花大量的时间和内存。SAX 允许在读取文档的时候,即对文档进行处理,解析完毕也就处理完成了,不必等到整个文档被分析储存之后才进行操作。
--------------------------------------------------------------------------------
1. SAX 的处理机制
<1> SAX 是一种基于事件驱动的 API 。
<2> 利用 SAX 解析 XML 文档,涉及两个部分:解析器和事件处理器:
a. 解析器负责读取 XML 文档,并向事件处理器发送事件。
b. 事件处理器负责对事件做出相应,对传递的 XML 数据进行处理。
--------------------------------------------------------------------------------
2. 解析器 — XMLReader 接口
<1> SAX 解析器接口和事件处理器接口在 org.xml.sax 包中定义。
<2> XMLReader 接口是 SAX 2.0 解析器必须实现的接口。该接口允许应用程序设置和查询解析器的功能和特性,注册处理文档的事件处理器,以及启动文档的解析。
<3> XML 解析器提供商负责提供实现 XMLReader 接口的解析器类。
--------------------------------------------------------------------------------
3. 事件处理器 ---- ContentHander 接口
<1> SAX API 定义了许多事件,这些事件分别由事件处理器中的相应方法去响应。
<2> 如果应用程序要获得基本的解析事件,需要实现 ContentHandler(内容事件处理器) 接口,并使用 XMLReader 对象的 setContentHeader() 方法向解析器注册一个ContentHandler实例。解析器使用这个实例来报告与文档相关的基本事件。如:元素的开始和结束等。
<3> 在 ContentHandler 接口中,事件的顺序反映了文档自身信息的顺序。如:元素的所有内容(字符数据,子元素) 都将依次在 startElement 事件和 endElement 事件之间出现。
--------------------------------------------------------------------------------
4. ContentHander 的主要方法
Void startDocument()
Void endDocument()
Void startElement(String uri, String localName, String qName, Attributes attrs)
Void end Element(String uri, String localName, String qName)
Void characters(char [] ch, int start, int length):该方法接收字符数据的通知。解析器调用这个方法来报告字符数据块。为了提高解析效率, SAX 解析器会把读取到的所有字符都放在一个字符数组中,通过 ch 参数传递给 characters 方法,在该方法中,若想获取本次字符数据事件中读到的字符数据,需要使用 start 和 length 参数。
为了简化程序的编写,在 org.xml.sax.helpers 包中提供了一个帮助类 DefaultHandler, 它实现了
ContentHandler, DTDHandler 等 4 个接口,在应用程序中只需要编写从 DefaultHandler 继承的子类,然后更新需要重写相应的方法即可。
--------------------------------------------------------------------------------
5. SAX 解析工厂
<1> 与 DOM 类似,JAXP 也为 SAX 解析器提供了工厂类: SAXParserFactory 类。
<2> JAXP 中定义的 SAX 解析器类是 SAXParser. SAXParser 类是 XMLReader 实现类的一个包装类。
<3> 可以调用 SAXParser 中的 parse() 方法来解析 XML 文档。
--------------------------------------------------------------------------------
6. 下面是运用 SAX 解析 XML 文件的步骤和代码:
SAXParserFactory factory = null;
//1. 得到 SAXParserFactory 的实例
factory = SAXParserFactory.newInstance();
//2. 得到 SAXParser 解析器对象
SAXParser parser = factory.newSAXParser();
DefaultHandler handler = null;
handler = new MyDefaultHandler();
//3. 利用 SAX 解析 XML 文档,并且向解析器注册一个事件监听器
parser.parse(new File("cities.xml"), handler);
class MyDefaultHandler extends DefaultHandler() {
// 常用的事件监听器事件有: characters; endDocument; endElement
}
分享到:
相关推荐
本实例将通过SAX解析XML,帮助我们更好地理解和应用这一技术。 在SAX解析XML的过程中,主要涉及以下几个关键知识点: 1. **事件驱动模型**:SAX解析器在读取XML文档时,遇到每个元素、属性或文本节点时都会触发...
总结来说,SAX解析XML是一种高效、节省内存的处理XML文档的方式,特别适用于大文件和实时数据流。通过创建和配置解析器,定义事件处理器,以及选择合适的输入源,开发者可以在Java应用程序中实现对XML文档的流式处理...
总结来说,SAX解析XML是一种高效的处理方法,尤其适合处理大型XML文件。通过实现事件驱动的回调接口,开发者可以定制化地处理XML文档的各个部分,而无需一次性加载整个文档到内存。在实际的编程实践中,理解并掌握...
综上所述,SAX解析XML在Android开发中是一个重要的技能,尤其适用于处理大体积或需要节省内存的场景。通过创建自定义处理器和理解事件驱动机制,开发者可以有效地解析和处理XML数据。在实际项目中,可以结合具体的...
本教程将详细讲解如何在Android中使用SAX解析XML。 首先,要使用SAX解析XML,我们需要理解其工作原理。SAX解析器会逐个读取XML文档的元素,每当遇到文档的开始、结束、文本等事件时,就会触发相应的回调方法。...
以下是一个简单的SAX解析XML文件的Android实例源码: ```java import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; public class SaxExample extends ...
在学习SAX解析XML的过程中,了解XML的语法基础和熟悉Java的反射机制也会有所帮助,因为这有助于更好地理解和处理回调函数中的数据。同时,掌握如何处理XML命名空间、处理指令和注释等高级特性也是提升技能的关键。总...
SAX(Simple API for XML)是XML解析器的一种,它采用事件驱动的方式处理XML文档,相较于DOM(Document Object Model)解析器,SAX解析更加轻量级和高效。 SAX解析的核心思想是读取XML文档时,每当遇到一个元素、...
综上所述,SAX解析XML是一种高效、轻量级的处理方式,尤其适用于处理大型XML文档。通过理解SAX解析的工作原理和事件处理器机制,我们可以编写出更加灵活、高效的XML处理代码。同时,分析SAXTest.java的源码将有助于...
Saxon是一个强大的XML和XSLT处理库,它不仅支持SAX解析,还支持DOM和StAX,以及XSLT 2.0和3.0的转换。Saxon HE是其免费版本,适用于基本的XSLT转换和XML处理需求。 总的来说,SAX9.0提供了一种高效、低内存占用的...
XML(eXtensible Markup ...总结来说,SAX解析XML是一种高效且内存友好的方式,适用于处理大型XML文档。通过理解SAX的工作原理和事件驱动机制,我们可以编写出高效的XML处理程序,有效应对各种复杂的XML数据处理需求。
通过上述步骤,我们可以利用SAX解析XML文件,并在Android应用中进行数据处理。在实际项目中,可能还需要结合线程、异步处理等技术,以避免阻塞UI主线程。对于复杂的数据结构,可能需要维护一个状态机来跟踪解析过程...
在给定的压缩包中,可能包含了使用DOM和SAX解析XML的Java代码示例。`www.pudn.com.txt`可能是一个文本文件,包含了有关这些示例的介绍或链接。`SAMPLE`可能是代码样例,展示如何在实际项目中应用DOM和SAX解析XML。 ...
在Android开发中,处理XML数据是一项常见的任务,特别是在与服务器交互或者读取本地资源时...这个简单示例对于初学者理解SAX解析机制非常有帮助。在实际项目中,可以根据需求调整事件处理器,以解析XML并提取所需数据。
程序通过实现SAX解析器的回调接口来处理这些事件,从而解析XML文档。SAX解析器也是内存效率高的,因为它不需要一次性加载整个文档到内存中。与Pull解析相比,SAX解析更加面向事件,程序员只需要关注自己关心的事件,...
综上所述,理解和解决基于Android平台的SAX解析XML错误问题需要对XML规范、Android的文件系统、内存管理以及多线程编程有深入理解。通过上述方法,开发者可以更有效地处理XML解析中的各种挑战,提升应用的稳定性和...
通过引入这个jar包,开发者可以利用SAX解析XML文档,提取其中的数据或者执行其他相关操作。 描述中提到的“xml解析工具”和“sax解析xml的工具”,进一步强调了SAX是专门用于XML解析的一种技术。它的工作原理是当...
### SAX解析XML:深入理解与应用 #### 一、SAX概述 SAX(Simple API for XML)是一种用于解析XML文档的技术,与DOM(Document Object Model)不同,它采用事件驱动的方式,仅处理文档中所需的特定部分,而不是一次...
Python3基于SAX解析XML操作是处理XML文件的一种方法,它适用于处理大型文件以及只需要文件部分内容的场景。SAX代表Simple API for XML,是一种事件驱动的API。它的工作机制是:解析器读取XML文档,遇到特定事件(如...