StAX 解析器 - 概述



StAX 是一个基于 JAVA 的 API,用于像 SAX 解析器一样解析 XML 文档。但是,这两个 API 之间有两个主要区别:

  • StAX 是一个拉取式 API,而 SAX 是一个推送式 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) - 将属性写入元素。

广告
© . All rights reserved.