Java SAX解析器 介绍
什么是SAX解析器
SAX(Simple API for XML)是一个基于事件的 XML 文档解析器。与 DOM 解析器不同,SAX 解析器不创建解析树。SAX 是 XML 的流接口,这意味着使用 SAX 的应用程序接收有关正在处理的 XML 文档的事件通知、元素和属性,从文档顶部开始,以文档的结束结束。根元素。
-
从上到下读取 XML 文档,识别构成格式良好的 XML 文档的标记。
-
令牌的处理顺序与它们在文档中出现的顺序相同。
-
向应用程序报告解析器遇到的标记。
-
应用程序提供了一个必须向解析器注册的“事件”处理程序。
-
随着令牌的识别,处理程序中的回调方法将使用相关信息进行调用。
SAX解析器的应用场景
您应该在以下情况下使用 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)) : 提供可用于识别文档中位置的定位器。
-
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)