📜  Java StAX分析器-概述

📅  最后修改于: 2020-11-14 10:28:43             🧑  作者: Mango


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() -在元素末尾调用。

  • 字符asCharacters() -可用于获取字符,例如CDATA,空格等。

XMLEventWriter类别

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

  • add(Event event) -将包含元素的事件添加到XML。

XMLStreamReader类

此类提供事件的迭代器,可用于在解析XML文档时对发生的事件进行迭代。

  • int next() -用于检索下一个事件。

  • boolean hasNext() -用于检查是否存在其他事件。

  • String getText() -用于获取元素的文本。

  • 字符串getLocalName() -用于获取元素的名称。

XMLStreamWriter类

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

  • writeStartElement(String localName) -添加给定名称的开始元素。

  • writeEndElement(String localName) -添加给定名称的结束元素。

  • writeAttribute(String localName,String value) -将属性写入元素。