- Apache Xerces 教程
- Xerces 主页
- XML 概述
- Xerces 环境设置
- XML 解析器
- Xerces DOM 解析器
- Xerces DOM 解析器
- 解析 XML 文档
- 查询 XML 文档
- 创建 XML 文档
- 修改 XML 文档
- Xerces SAX 解析器
- Xerces SAX 解析器
- 解析 XML 文档
- 查询 XML 文档
- 创建 XML 文档
- 修改 XML 文档
- Xerces StAX 解析器
- Xerces StAX 解析器
- 解析 XML 文档
- 查询 XML 文档
- 创建 XML 文档
- 修改 XML 文档
- Xerces 有用资源
- Xerces - 快速指南
- Xerces - 有用资源
- Xerces - 讨论
SAX 解析器 - 概述
SAX(XML 的简单 API)是一种基于事件的 XML 文档解析器。与 DOM 解析器不同,SAX 解析器不创建解析树。SAX 是 XML 的流式接口,这意味着使用 SAX 的应用程序会收到有关正在处理的 XML 文档的事件通知 - 每次一个元素和属性,按顺序从文档顶部开始,以 ROOT 元素的关闭结束。
从上到下读取 XML 文档,识别构成格式良好的 XML 文档的标记。
标记按其在文档中出现的顺序进行处理。
向应用程序报告解析器遇到的标记的性质,并在其发生时报告。
应用程序提供一个“事件”处理程序,该处理程序必须向解析器注册。
当识别出标记时,处理程序中的回调方法将使用相关信息被调用。
何时使用?
您应该在以下情况下使用 SAX 解析器:
您可以从上到下以线性方式处理 XML 文档。
文档嵌套不深。
您正在处理一个非常大的 XML 文档,其 DOM 树将消耗大量内存。典型的 DOM 实现使用十个字节的内存来表示一个字节的 XML。
要解决的问题只涉及 XML 文档的一部分。
数据在解析器看到后立即可用,因此 SAX 非常适合通过流到达的 XML 文档。
SAX 的缺点
由于 XML 文档以仅向前的方式处理,因此我们无法随机访问它。
如果您需要跟踪解析器已看到的或更改项目顺序的数据,则必须自己编写代码并存储数据。
ContentHandler 接口
此接口指定 SAX 解析器用于通知应用程序程序它已看到的 XML 文档组件的回调方法。
void startDocument() - 在文档开始时调用。
void endDocument() - 在文档结束时调用。
void startElement(String uri, String localName, String qName, Attributes atts) - 在元素开始时调用。
void endElement(String uri, String localName,String qName) - 在元素结束时调用。
void characters(char[] ch, int start, int length) - 遇到字符数据时调用。
void ignorableWhitespace( char[] ch, int start, int length) - 当存在 DTD 且遇到可忽略的空白时调用。
void processingInstruction(String target, String data) - 识别处理指令时调用。
void setDocumentLocator(Locator locator)) - 提供一个 Locator,可用于识别文档中的位置。
void skippedEntity(String name) - 遇到未解析的实体时调用。
void startPrefixMapping(String prefix, String uri) - 定义新的命名空间映射时调用。
void endPrefixMapping(String prefix) - 命名空间定义结束其作用域时调用。
Attributes 接口
此接口指定用于处理与元素关联的属性的方法。
int getLength() - 返回属性的数量。
String getQName(int index)
String getValue(int index)
String getValue(String qname)