原帖http://blog.youkuaiyun.com/andyxhua/archive/2008/01/24/2063784.aspx
StAX:Streaming API for XML ,如同字面意思,是基于流的API,相对于传统的DOM和SAX,StAX在性能和易用性上取得了很好的平衡。StAX是基于SAX的,同样将XML作为一组事件来处理,不过与SAX不同的是,StAX是采用拉(Pull)的方式来处理事件, 允许应用程序从事件流中拉出事件,而不是提供从解析器中接收事件的回调程序程序。
StAX 包括两套处理 XML 的 API,分别提供了不同程度的抽象。一种是基于指针的 API, 提供应用程序把 XML 作为一个标记(或事件)流来处理,这是一种低层 API,效率高,抽象程度低。另一种是较为高级的基于迭代器的 API, 提供应用程序把 XML 作为一系列事件对象来处理,每个对象和应用程序交换 XML 结构的一部分,应用程序直接处理这些代表了XML结构一部分的事件对象。
StAX在JDK6中已经内置了,或许就是以后的标准。
下面以一个简单的例子示范基于指针的API的使用。例子说明:从一个xml结构的订单信息中parse出Java对象,修改这个对象,然后输出为一个xml文件。
一、xml文件内容


























二、Java对象结构
































































三、解析示例,注意代码注释
解析




































































输出



































































































代码测试,其中TestStax类为包含了上面解析与输出代码的类
TestStax stax = new TestStax();
Order order = stax.parse(XmlFile.getSample1Stream());
System.out.println(order.toString());
Item item = new Item();
item.setSku("0123-BP");
item.setQuantity(10);
item.setDescription("Java XML 开发");
order.addItem(item);
String xml = stax.write(order);
System.out.println("------------------------------");
System.out.println(xml);
XML输出结果
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE po SYSTEM "src/sample.dtd">
<po xmlns="http://www.youkuaiyun.com" id="20080124001" submitted="2008-01-24">
<billTo id="addr-1">
<company>优快云</company>
<street>朝阳区望京北路</street>
<city>朝阳区</city>
<state>北京</state>
<postalCode>100102</postalCode>
</billTo>
<shipTo href="addr-1"></shipTo>
<order>
<item sku="o318-BP" quantity="5">
<description>J2EE programmic</description>
</item>
<item sku="o947-TI" quantity="12">
<description>Java WEB Service</description>
</item>
<item sku="o008-PR" quantity="133">
<description>C++ develop</description>
</item>
<item sku="0123-BP" quantity="10">
<description>Java XML 开发</description>
</item>
</order>
</po>
没有什么多于的介绍,基本上就是一个代码示范,我相信二八法则,20%的知识基本能够满足80%可能碰到的场景,呵呵,算是谬论吧。
详细的介绍在IBM网站上有一篇,个人觉得还不错
http://www.ibm.com/developerworks/cn/xml/x-stax1.html
http://www.ibm.com/developerworks/cn/xml/x-stax2.html
http://www.ibm.com/developerworks/cn/xml/x-stax3.html