SAX 解析xml的处理机制
来源:互联网 发布:服装淘宝店铺介绍 编辑:程序博客网 时间:2024/06/05 04:43
转载: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
}
昨天我们学习了使用 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的处理机制
- xml的sax解析
- xml的sax解析
- xml的SAX解析
- XMl的SAX解析
- 详解使用sax解析xml文件的DefaultHandler处理类
- 详解使用sax解析xml文件的DefaultHandler处理类
- 详解使用sax解析xml文件的DefaultHandler处理类
- SAX解析XML的例子.
- XML的SAX解析器
- xml的sax简单解析
- xml文件的sax解析
- SAX解析 XML的Demo
- IOS XML的SAX解析
- xml文件的sax解析
- XML解析-SAX的使用
- Android的sax解析xml
- SAX解析XML的原理
- 从新浪博客开始搬家
- c#模拟鼠标键盘操作
- C++标准库介绍
- 做安全的,这里有你意想不到的东西
- Eclipse RCP界面的布局的理解
- SAX 解析xml的处理机制
- 窗口刷新的几个函数:Invalidate UpdateWindow RedrawWindow
- SAX解析XML 详解
- 大整数四则运算
- 剪刀石头布
- 今天开始多线程的学习
- masm32 Windows下汇编利器
- Ubuntu-11.04 32bit 编译Android 2.3源码
- linux下的su,su -,以及cd,cd - ,cd ~总结