Xerces 简明教程
SAX Parser - Overview
SAX(XML 简单 API)是基于事件的 XML 文档解析器。与 DOM 解析器不同,SAX 解析器不创建解析树。SAX 是一个 XML 流传输接口,这意味着使用 SAX 的应用程序会针对正在处理的 XML 文档接收事件通知,包括元素、属性以及从文档顶部开始、以 ROOT 元素的结束为结尾的顺序排列的时间。
-
从上到下读取 XML 文档,识别构成良好形成的 XML 文档的标记。
-
标记按其出现在文档中的顺序进行处理。
-
向应用程序报告解析器在遇到解析标记时发现的标记的类型。
-
应用程序提供了一个“事件”处理程序,该处理程序必须在解析器中注册。
-
随着标记被识别,带有相关信息的回调方法将被调用。
When to use?
以下情况应使用 SAX 解析器 -
-
你可以从上到下线性处理 XML 文档。
-
文档没有深度嵌套。
-
您正在处理一个非常大的 XML 文档,它对应的 DOM 树会占用大量的内存。典型的 DOM 实现使用 10 个字节的内存表示一个字节的 XML。
-
需要解决的问题仅涉及 XML 文档的一部分。
-
数据一旦被解析器看到就可用,因此 SAX 非常适用于通过流到达的 XML 文档。
ContentHandler Interface
此接口指定 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)) − 提供一个用于标识文档中位置的定位器。
-
void skippedEntity(String name) − 在遇到未解析的实体时调用。
-
void startPrefixMapping(String prefix, String uri) − 在定义新的命名空间映射时调用。
-
void endPrefixMapping(String prefix) − 在命名空间定义结束其作用域时调用。