参考:百度百科 http://baike.baidu.com/view/1027076.htm?fr=ala0
在JDK 6.0中基于StAX分析XML数据: http://hi.baidu.com/1shome/blog/item/5baaee01db2609051d958302.html
DOM、SAX 、DOM4J、JDOM、StAX生成XML 并返回XML字符串形式:http://dreams75.javaeye.com/blog/512319
STAX:Streaming API for XML (StAX)
针对于XML的流式API(StAX),是在2004年3月的JSR 173规范中引入,这是一种针对XML的流式拉分析API。StAX是JDK 6.0提供的一种新特征。StAX通过提供一种基于事件迭代器(Iterator)的API让 程序员去控制xml文档解析过程,程序遍历这个事件迭代器去处理每一个解析事件,解析事件可以看做是程序拉出来的,也就是程序促使解析器产生一个解析事件 然后处理该事件,之后又促使解析器产生下一个解析事件,如此循环直到碰到文档结束符;
SAX 也是基于事件处理xml文档,但却是用推模式解析,解析器解析完整个xml文档后,才产生解析事件,然后推给程序去处理这些事件;
一、 推分析之于拉分析
比较于推分析,拉分析具有如下一些优点:
1. 在拉分析中,事件是由分析应用程序生成的,因此把分析规则提供到客户端而不是分析器。
2. 拉分析的代码更简单并且它比推分析有更少的库。
3. 拉分析客户端能同时读多个XML文档。
4. 拉分析允许你过滤XML文档并且跳过分析事件。
二、 使用XMLStreamWriter进行写操作
首先,你要创建将待分析的XML文档。由StAX的XMLStreamWriter生成XML。然而,XMLStreamWriter的一个限制是,它不一定会生成良构的文档-而且生成的文档也不一定是有效的。你需要确保生成的XML文档是良构的。列表1是一个由XMLStreamWriter生成的原始XML文档的示例。
1.导入SaTX类
2.你要从一个XMLOutputFactory中得到你的XMLStreamWriter。因此,首先你必须创建一个新的XMLOutputFactory:
3.接下来,创建一个FileWriter或者PrintWriter以输出XML文档-它将被生成到一个XML文件中:
4. 接下来,创建一个XMLStreamWriter:
5.声明xml版本和编码(以及添加注释)
6.使用writeProcessingInstruction()方法以输出一条处理指令:
XMLStreamWriter.writeProcessingInstruction("catalog","journal='OReilly'");
7.使用writeStartElement()方法以输出'catalog'元素的开始(元素前缀和命名空间URI也可以在这个方法中指定的):
XMLStreamWriter.writeStartElement("journal","catalog","http://OnJava.com/Journal");
8.使用writeNamespace()方法以添加'journal'命名空间声明(命名空间前缀和命名空间URI也是在这个方法中指定的):
XMLStreamWriter.writeNamespace("journal","http://OnJava.com/Journal");
9.再次使用writeNamespace()方法添加xsi命名空间:
XMLStreamWriter.writeNamespace("xsi","http://www.w3.org/2001/XMLSchema-instance");
10.使用writeAttribute()方法添加xsi:namespaceSchemaLocation属性:
XMLStreamWriter.writeAttribute("xsi:noNamespaceSchemaLocation","file://c:/Schemas/catalog.xsd");
11.增加新元素(list)
12.结束根节点
任何包含文本或子元素的元素都要有一个结束标签。使用writeEndElement()元素来添加'title'元素的结束标签:
xmlsw.writeEndElement();
13.输出缓冲的数据
XMLStreamWriter.flush();
14.关闭XMLStreamWriter。
XMLStreamWriter.close();
一个小例子:
有点混乱了~~~ 看看小例子可以整理下思路~~~