StAX 生成XML文件

参考:百度百科 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();

 

一个小例子:

 

有点混乱了~~~ 看看小例子可以整理下思路~~~

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值