`

使用 SAX 解析 XML 文档

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文件的实例。一个项目同时用dom解析和sax解析xml文件貌似会报错,项目框架建一直是用sax和dom4j解析xml文件的。当我用dom解析xml文件。导入包后就报错识别不了xml文件的编码格式。于是做了一个sax解析xml...

    使用DOM解析XML和使用SAX解析XML

    而使用SAX解析XML文档的步骤则涉及实现`ContentHandler`接口,该接口包含了一系列方法如`startElement`、`endElement`、`characters`等,它们在解析XML文档时被触发。程序员需要在这些方法中编写逻辑来处理XML文档中...

    [Android]使用SAX解析XML文件

    以下是使用SAX解析XML文件的步骤: 1. 引入依赖:在Android项目中,通常需要添加`xmlpull`库,它包含了SAX解析器。可以在`build.gradle`文件中添加依赖: ``` implementation 'xpp3:xpp3:1.1.4c' ``` 2. 创建...

    Java SAX解析Xml文档Demo

    本示例将详细解释如何在Java中使用SAX解析XML文档,并通过注释进行详细说明。 首先,我们需要引入SAX解析器的依赖库,通常这可以通过在项目构建配置中添加JAXB或Xerces实现来实现。 ```java // 引入必要的库,如...

    使用SAX解析xml文件

    使用SAX解析XML文件的基本步骤如下: 1. **导入库**:首先需要导入`org.xml.sax`包下的相关类,如`SAXParserFactory`,`SAXParser`和`DefaultHandler`。 2. **创建解析工厂**:使用`SAXParserFactory.newInstance()`...

    Sax解析XML文件解析

    **SAX解析XML的基本原理:** SAX解析器以流式的方式读取XML文档,当遇到文档的各个元素时,会触发相应的事件,如开始文档、开始元素、结束元素、字符数据等。程序员通过实现SAX解析器的回调接口来处理这些事件,从而...

    Sax解析xml文件

    以下是一个使用SAX解析XML文件的基本步骤: 1. **创建解析器**: 首先,我们需要创建一个SAX解析器实例。在Java中,这通常通过`SAXParserFactory`类完成。设置解析器属性,然后调用`newSAXParser()`方法获取`...

    sax解析xml文件

    总结来说,"saxloadxml"项目提供了使用SAX解析XML文件的一个实例,可以帮助开发者了解如何利用SAX解析器处理XML文档,尤其是在性能和内存使用方面有较高要求的情况下。通过学习和实践这个项目,你可以提升处理XML...

    使用SAX解析XML文件个人总结

    ### 使用SAX解析XML文件详解 #### 一、XML与SAX简介 XML(Extensible Markup Language,可扩展标记语言)是一种用于标记电子文件使其具有结构性的标记语言,旨在克服HTML的一些不足,使得数据能够被不同系统间共享...

    Servlet利用SAX解析XML文档

    本主题将深入探讨如何在Servlet中利用SAX解析XML文档。 首先,我们需要了解SAX解析的基本原理。SAX解析器不创建整个XML文档树,而是当遇到XML文档的各个部分(如元素、属性、文本等)时,触发相应的事件回调函数。...

    Servlet利用SAX解析XML文档(新上传的有源码)

    Servlet利用SAX解析XML文档(新上传的有源码)Servlet利用SAX解析XML文档(新上传的有源码)Servlet利用SAX解析XML文档(新上传的有源码)Servlet利用SAX解析XML文档(新上传的有源码)Servlet利用SAX解析XML文档(新上传的有...

    android使用SAX解析xml

    - `xmlSAXPaserDemo`可能是一个包含示例代码的Android项目,用于演示如何实际使用SAX解析XML文件。 - 项目中可能包括网络请求模块、SAX解析器处理类以及展示解析结果的UI部分。 通过以上步骤,开发者可以在...

    Android中使用sax解析xml文件的方法

    首先,让我们了解一下SAX解析XML的基本流程。当SAX解析器读取XML文件时,它会按照文档顺序触发一系列事件,这些事件对应于ContentHandler接口中定义的方法。以下是ContentHandler接口的一些关键方法: 1. `start...

    android 使用Sax解析XML 源码实例

    下面是一个SAX解析XML的示例(有点长,因为详细注解了SAX事件处理的所有方法),SAX API中主要有四种处理事件的接口,它们分别是ContentHandler,DTDHandler, EntityResolver 和 ErrorHandler 。下面的例子可能...

    sax解析xml

    通过以上步骤,我们就能使用SAX解析XML文档了。这种解析方式适用于处理大文件,因为它不会一次性加载整个XML文档到内存,而是按需逐行读取,从而节省内存资源。在实际项目中,可以根据需求定制ContentHandler来实现...

    sax解析xml尤其是获取元素的值或者内容

    本文将深入探讨如何使用SAX解析XML并获取元素的值或内容。 首先,SAX解析器以流式方式读取XML文档,当遇到文档的不同部分时,会触发相应的事件,如开始文档、开始元素、结束元素等。开发者可以注册事件处理器来响应...

    SAX解析xml文件源码

    下面将详细介绍SAX解析XML文件的基本原理、工作流程以及在Android环境下如何实现。 **SAX解析的基本原理:** SAX解析器在读取XML文档时会触发一系列的事件,如开始文档、结束文档、开始元素、结束元素、字符数据等...

    SAX解析XML实例

    5. **解析XML文档**:使用解析器和事件处理器解析XML文件。 ```java MyHandler handler = new MyHandler(); parser.parse(new File("path_to_xml_file.xml"), handler); ``` 在实际应用中,我们可能还需要处理...

    应用源码之27.使用SAX解析XML.zip

    通过以上步骤,你可以在Android项目中有效地使用SAX解析XML文件。这不仅可以降低内存消耗,还能提高应用程序的性能。记得在实际应用中,根据XML文件的结构和需求,自定义事件处理器,以满足特定的业务逻辑。在代码...

    SDcard数据访问SAX解析XML文件

    要使用SAX解析XML文件,我们需要遵循以下步骤: 1. **创建解析器**: 首先,我们需要创建一个SAX解析器。Android提供了一个内置的`DefaultHandler`类,我们可以继承它并重写其中的方法来处理解析过程中遇到的事件。 ...

Global site tag (gtag.js) - Google Analytics