StAX处理XML

来源:互联网 发布:centos教程 编辑:程序博客网 时间:2024/06/08 17:23

1.StAX(The Streaming API for XML),是一种利用拉模式解析(pull-parsing)XML文档的API。

StAX 把重点放在流上,它提供了两套处理 XML 的 API:基于指针的 API, 把 XML 文档当做一个标记(或事件)流来处理;允许应用程序检查解析器的状态,获得解析的上一个标记的信息,然后再处理下一个标记,依此类推;另一种较为高级的是基于迭代器的 API,把 XML 作为一系列事件对象来处理,每个对象和应用程序交换 XML 结构的一部分。应用程序根据需要定制解析事件的类型,然后将其转换成对应的具体类型,然后利用定制事件提供的方法获得属于该事件的信息。

2.StAX工作原理:通过一种基于事件迭代器(Iterator)的API让程序员去控制xml文档解析过程,程序遍历这个事件迭代器去处理每一个解析事件,解析事件可以看做是程序拉出来的,也就是程序促使解析器产生一个解析事件然后处理该事件,之后又促使解析器产生下一个解析事件,如此循环直到碰到文档结束符。

3.StAX和SAX的区别:

SAX也是基于事件处理xml文档,但却是用推模式解析,解析器解析完整个xml文档后,才产生解析事件,然后推给程序去处理这些事件。SAX中解析器是工作主体,而事件处理器是由解析器驱动的,如果解析文档过程中产生问题,则剩余的所有文档就无法处理。

StAX使用拉模式,解析器首先将XML文档所有的事件全部取出,然后通过处理程序处理这些事件。StAX中处理器是工作主体,如果解析文档过程中产生问题,只会影响到出问题的部分,其余部分处理不受影响。

1.      通过一个简单的StAX例子,讲解StAX的基本工作过程:

(1).创建XMLInputFactory :

[java] view plain copy
  1. XMLInputFactory factory = XMLInputFactory.newInstance();    
 

(2).读入XML文档:

[java] view plain copy
  1. Reader fileReader = new FileReader(xmlfile);    
  2. factory.setProperty(XMLInputFactory.IS_COALESCING, Boolean.TRUE);   
 

(3).通过XMLInputFactory 创建StAXReader:

[java] view plain copy
  1. XMLStreamReader reader = factory.createXMLStreamReader(fileReader);    
 

(4).获取XML文档节点事件:

[java] view plain copy
  1. //获取节点类型,结果是以整形的方式返回的。  
  2. int event = reader.getEventType();  
 

(5).根据XML文件节点事件处理进行调用相应的事件处理程序。

5.StAX定制事件:

StAX一种比较高级的基于迭代器的XML处理API需要定制事件,定制事件的要点:

(1).定制的事件都必须实现 XMLEvent 接口,很遗憾,目前为止还没有任何基类可以继承,所以基本上应用程序需要实现每一个 XMLEvent 接口定义的方法。

(2).定制的事件都必须有一个 int 型的值作为事件的 type。系统默认的事件类型有:

a.表示文档的开始:XMLStreamConstants.START_DOCUMENT。

b.表示元素的开始:XMLStreamConstants.START_ELEMENT。

c.表示元素字符:XMLStreamConstants.CHARACTERS。

d.表示元素的结束:XMLStreamConstants.END_ELEMENT。

e. 表示文档的结束:XMLStreamConstants.END_DOCUMENT。

6.StAX定制EventReader:

如果定制了自己StAX的事件,那么系统默认的 EventReader 已不能满足要求。所以程序需要定义自己的EventReader。

XMLEventReader 实际上是实现了 iterator,EventReaderDelegate 是一个便利类,代理了所有的EventReader 的功能,经过定制的EventReader 后,原始的 XMLEvent 事件流就转变成了包含一系列定制事件的事件流。当然除了定制事件之外的那些原始的 XML Events事件都还在。

7.StAX定制EventWriter:

StAX EventWriter的工作就是把过滤出来的 Event 流的序列化。StAX API 提供了 XMLEventWriter,提供默认支持的 event 的序列化。如果定制了StAX事件,默认的 XMLEventWriter 就不能满足需求,所以需要定制XMLEventWriter。

定制的 event writer 主要需要实现 XMLEventWriter接口的add( XMLEvent) 方法,把程序定制的 Entry Event 加到 XMLEventWriter 里面。其余的方法都是用 XMLEventWriter 的默认功能。
8.StAX的优点:

(1).有针对简单和性能的两种解析模式。

(2).由程序控制解析器,易于支持多输入。

(3).强大的过滤功能有利于数据检索。

9.StAX的不足和适用场景:

和SAX类似,StAX的不足为:

(1).没有内建的文档导航支持。

(2).不能随机访问 XML 文档。

(3).不支持修改 XML 文档。

StAX适用于:需要对 XML 文档进行流处理而且支持命名空间的程序(不要用来操作和修改XML 文档)。

 

原创粉丝点击