Java 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 解析器,您应该在应用程序的类路径中包含 stax.jar。
StAX API 的特点如下 −
从上到下读取 XML 文档,识别构成格式良好的 XML 文档的标记。
令牌的处理顺序与它们在文档中出现的顺序相同。
向应用程序报告解析器遇到的令牌的性质。
应用程序提供了一个"事件"阅读器,它充当一个迭代器并遍历事件以获取所需的信息。 另一个可用的阅读器是"游标",它充当指向 XML 节点的指针。
当事件被识别后,可以从事件对象中检索 XML 元素并进行进一步处理。
什么时候使用?
您应该在以下情况下使用 StAX 解析器 −
您可以从上到下以线性方式处理 XML 文档。
文档嵌套不深。
您正在处理一个非常大的 XML 文档,其 DOM 树会占用太多内存。 典型的 DOM 实现使用十字节的内存来表示一个字节的 XML。
要解决的问题只涉及XML文档的一部分。
一旦解析器看到数据,它就可以使用,因此 StAX 适用于通过流到达的 XML 文档。
SAX 的缺点
我们无法随机访问 XML 文档,因为它是以只进的方式处理的。
如果您需要跟踪解析器看到的数据或解析器更改项目顺序的位置,那么您必须自己编写代码并存储数据。
XMLEventReader 类
此类提供事件迭代器,可用于在解析 XML 文档时迭代发生的事件。
StartElement asStartElement() − 用于检索元素的值和属性。
EndElement asEndElement() − 在元素末尾调用。
Characters() − 可用于获取 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) − 将属性写入元素。