StAX是一个基于JAVA API用于解析XML文档,类似SAX解析器的方式。但两种API之间有两个区别
-
StAX是PULL API,其中作为SAX是PUSH API。这意味着如果StAX解析器,客户端应用程序需要询问StAX解析器从XML获取信息它所需要的,但如果是SAX解析器,客户端应用程序需要获取信息时,SAX解析器会通知客户端应用程序的信息是可用的。
-
StAX的API可以读取和写入XML文档。使用SAX API,XML可以是只读的。
环境设置
为了使用StAX的解析器,应该准备好stax.jar在应用程序的类路径中。下载 stax-1.2.0.jar.
以下是StAX API的功能
-
读取XML文件从上到下,认识构成一个结构完整的XML文档的标记
-
令牌是以相同的顺序进行处理,它们出现在文档中
-
报告应用程序,因为解析器遇到标记的特性
-
应用程序提供了一个“事件”读取器充当了事件,以获得所需信息的迭代器和迭代。可另一个读取器是“光标”充当一个指向XML节点。
-
由于事件被识别,XML元素可以从事件对象进行检索,并且可以进一步处理。
什么情况下使用?
应该使用的StAX解析器的时候:
-
可以处理在自上而下线性方式的XML文档。
-
文件并不深入嵌套。
-
处理一个非常大的XML文档的DOM树会占用太多的内存。典型的DOM的实现使用10字节的存储器以表示XML的一个字节。
-
要解决的问题涉及XML文档的一部分。
-
数据是可用的,只要它是由解析器处理,这样StAX可以很好地用于所收到超过数据流的XML文档。
SAX的缺点
-
因为它是在一个处理的方式,而不是随机访问XML文档。
-
如果需要跟踪的数据分析器已经看到或更改项目的顺序,必须编写代码和数据存储以自己方式处理。
XMLEventReader类
因为在解析XML文档时该类提供可用于迭代事件事件迭代器
-
StartElement asStartElement() - 用于检索值和元素的属性。
-
EndElement asEndElement() - 调用元件的端部。
-
Characters asCharacters() - 可用于获得字符,例如一个CDATA,空白等。
XMLEventWriter类
此接口指定创建事件的方法。
-
add(Event event) - 添加包含元素XML事件。
XMLStreamReader Class
因为在解析XML文档时该类提供可用于迭代事件事件迭代器
-
int next() - 用于检索下一个事件。
-
boolean hasNext() - 用于检查其他事件的存在与否
-
String getText() - 用于获取一个元素的文本
-
String getLocalName() - 用于获取一个元素的名称
XMLStreamWriter类
此接口指定创建事件的方法
-
writeStartElement(String localName) - 加入定名称开始元素。
-
writeEndElement(String localName) - 添加指定名称的结束元素。
-
writeAttribute(String localName, String value) - 编写属性到元素。