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 :
- XMLInputFactory factory = XMLInputFactory.newInstance();
(2).读入XML文档:
- Reader fileReader = new FileReader(xmlfile);
- factory.setProperty(XMLInputFactory.IS_COALESCING, Boolean.TRUE);
(3).通过XMLInputFactory 创建StAXReader:
- XMLStreamReader reader = factory.createXMLStreamReader(fileReader);
(4).获取XML文档节点事件:
- //获取节点类型,结果是以整形的方式返回的。
- 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 文档)。
- StAX处理XML
- StAX处理XML
- StAX处理xml(Stream API for XML)
- Java处理XML文档的StAX方式
- XML-----StAX
- SAX、 StAX、 DOM(dom4j优于jdom)处理XML
- Stax处理XML(一)——基于光标的查找
- SAX、 StAX、 DOM(dom4j优于jdom)处理XML
- SAX、 StAX、 DOM(dom4j优于jdom)处理XML
- StAX 生成XML文件
- STAX XML 解析
- 使用 StAX 解析 XML
- JAVA解析XML(StAX)
- 使用 StAX 解析 XML
- 使用Stax解析XML
- stax读取xml文件
- XML STAX样例
- Java XML StAX
- PDO连接数据库
- 一周二次课
- 【R语言 连接数据库 】RMySQL数据库编程指南
- luogu P1197 [JSOI2008]星球大战 并查集 逆向思维 邻接表
- Tomcat 8.x配置https,安装证书
- StAX处理XML
- Util工具类 判断时间是否在某段时间之内
- Git 常用命令学习
- java基础(十六) ---- unicode编码
- JAVA--JDBC
- 01_c++类的引入
- java常用坐标转换
- Informix数据库临时表的一些总结
- stax解析XML的一个例子