Xerces 简明教程

StAX Parser - Overview

StAX 是一个基于 JAVA 的 API,它以与 SAX 解析器类似的方式来解析 XML 文档。但这两个 API 之间有两个主要的差异点 −

  1. StAX 是一种 PULL API,而 SAX 是一种 PUSH API。这意味着对于 StAX 解析器,客户端应用程序需要在需要时要求 StAX 解析器从 XML 中获取信息,而对于 SAX 解析器,当 SAX 解析器通知客户端应用程序信息可用时,则要求客户端应用程序获取信息。

  2. StAX API 可以对 XML 文档进行读取和写入。使用 SAX API,只能读取 xml。

以下是 StAX API 的特性:

  1. 从上到下读取 XML 文档,识别构成良好形成的 XML 文档的标记。

  2. 标记按其出现在文档中的顺序进行处理。

  3. 向应用程序报告解析器遇到的令牌的性质,因为它们会发生。

  4. 应用程序提供一个充当迭代器的“事件”读取器,该读取器在事件上进行迭代以获取所需信息。另一个可用的读取器是充当指向 xml 节点的指针的“游标”读取器。

  5. 随着事件的标识,可以从事件对象中检索 xml 元素,并可以进一步处理。

When to use?

您应该在以下情况下使用 StAX 解析器:

  1. 你可以从上到下线性处理 XML 文档。

  2. 文档没有深度嵌套。

  3. 你正在处理一个非常大的 XML 文档,其 DOM 树会占用过多的内存。典型的 DOM 实现使用 10 个字节的内存来表示 1 字节的 XML。

  4. 需要解决的问题仅涉及 XML 文档的一部分。

  5. 解析器一看到数据便立即能用,因此 StAX 非常适用于流式传输的 XML 文档。

Disadvantages of SAX

  1. 由于只进行前向处理,因此我们无法随机访问 XML 文档。

  2. 如果你需要跟踪解析器看过的数据或更改项目顺序,则必须自己编写代码并存储数据。

XMLEventReader Class

该类提供事件的迭代器,可用在解析 XML 文档时用于迭代遇到的事件

  1. StartElement asStartElement() − 用于检索元素的值和属性。

  2. EndElement asEndElement() − 在元素结尾处调用。

  3. Characters asCharacters() − 可用于获取字符,如 CDATA、空白等。

XMLEventWriter Class

此接口指定用于创建事件的方法。

  1. add(Event event) − 添加包含元素的事件到 XML。

XMLStreamReader Class

这个类提供事件迭代器,它可用于在解析 XML 文档期间迭代事件。

  1. int next() − 用于检索下一个事件。

  2. boolean hasNext() − 用于检查是否存在其他事件

  3. String getText() − 用于获取元素的文本

  4. String getLocalName() − 用于获取元素的名称

XMLStreamWriter Class

此接口指定用于创建事件的方法。

  1. writeStartElement(String localName) − 添加给定名称的开始元素。

  2. writeEndElement(String localName) − 添加给定名称的结束元素。

  3. writeAttribute(String localName, String value) − 向元素写入属性。