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文档的标记.
令牌的处理顺序与它们在文档中出现的顺序相同.
报告应用程序解析器在发生时遇到的令牌的性质./p>
应用程序提供了一个"事件"阅读器,它充当迭代器并迭代事件以获取所需信息.另一个可用的读者是"cursor",它充当指向XML节点的指针.
在识别事件时,可以从事件对象中检索XML元素,可以进一步处理.
何时使用?
您应该在使用时使用StAX解析器 :
您可以从上到下以线性方式处理XML文档.
文档没有深层嵌套.
您正在处理一个非常大的XML文档,其DOM树也会消耗掉很多记忆.典型的DOM实现使用10个字节的内存来表示XML的一个字节.
要解决的问题只涉及XML文档的一部分.
解析器看到数据后立即可用数据,因此StAX适用于通过流到达的XML文档.
SAX的缺点
我们没有随机访问权限XML文档,因为它是以只进的方式处理的.
如果需要跟踪解析器已经看到的数据或解析器的位置已更改项目的顺序,然后您必须编写代码并自行存储数据.
XMLEventReader类
此类提供事件的迭代器,可用于在解析XML文档时迭代事件.
StartElement asStartElement() : 用于检索元素的值和属性.
EndElement asEndElement() : 在元素的末尾调用.
字符asCharacters() : 可用于获取CDATA,空格等字符.
XMLEventWriter Class
此接口指定创建事件的方法.
add(事件事件) : 将包含元素的事件添加到XML.
XMLStreamReader类
此类提供事件的迭代器可以用来在解析XML文档时迭代事件.
int next() : 用于检索下一个事件.
boolean hasNext() : 用于检查是否存在其他事件.
String getText() : 用于获取元素的文本.
String getLocalName() : 用于获取元素的名称.
XMLStreamWriter类
此接口指定创建方法一个事件.
writeStartElement(String localName) : 添加给定名称的开始元素.
writeEndElement(String localName) : 添加给定名称的结束元素.
writeAttribute(String localName,String value) : 将属性写入元素.