StAX 解析器 - 概述
StAX 是一种基于 JAVA 的 API,它以与 SAX 解析器类似的方式解析 XML 文档。但这两个 API 之间有两个主要区别 −
StAX 是一种 PULL API,而 SAX 是一种 PUSH API。这意味着,对于 StAX 解析器,客户端应用程序需要在需要时要求 StAX 解析器从 XML 中获取信息,但对于 SAX 解析器,当 SAX 解析器通知客户端应用程序信息可用时,客户端应用程序需要获取信息。
StAX API 可以读取和写入 XML 文档。使用 SAX API,xml 只能被读取。
以下是 StAX API 的功能 −
从上到下读取 XML 文档,识别组成格式良好的 XML 文档的标记。
标记按照它们在文档中出现的顺序进行处理。
向应用程序报告解析器遇到的标记的性质。
应用程序提供了一个"事件"读取器,它充当迭代器并迭代事件以获取所需的信息。另一个可用的读取器是"光标"读取器,它充当指向 xml 节点的指针。
在识别事件后,可以从事件对象中检索 xml 元素并进行进一步处理。
何时使用?
当 − 时,您应该使用 StAX 解析器
您可以从上到下以线性方式处理 XML 文档。
文档嵌套不深。
您正在处理一个非常大的 XML 文档,其 DOM 树将消耗太多内存。典型的 DOM 实现使用十个字节的内存来表示一个字节的 XML。
要解决的问题仅涉及 XML 文档的一部分。
解析器看到数据后即可使用,因此 StAX 非常适合通过流到达的 XML 文档。
SAX 的缺点
由于 XML 文档是以只进方式处理的,因此我们无法随机访问它。
如果您需要跟踪解析器看到的数据或更改项目的顺序,则必须自己编写代码并存储数据。
XMLEventReader 类
此类提供事件的迭代器,可用于在解析 XML 文档时迭代发生的事件
StartElement asStartElement() − 用于检索元素的值和属性。
EndElement asEndElement() − 在元素末尾调用。
Characters asCharacters() − 可用于获取 CDATA、空格等字符。
XMLEventWriter 类
此接口指定创建事件的方法。
add(Event event) −将包含元素的事件添加到 XML。
XMLStreamReader 类
此类提供事件迭代器,可用于在解析 XML 文档时迭代发生的事件
int next() − 用于检索下一个事件。
boolean hasNext() − 用于检查是否存在其他事件
String getText() − 用于获取元素的文本
String getLocalName() −用于获取元素的名称
XMLStreamWriter 类
此接口指定创建事件的方法。
writeStartElement(String localName) − 添加给定名称的起始元素。
writeEndElement(String localName) − 添加给定名称的结束元素。
writeAttribute(String localName, String value) − 将属性写入元素。