基于Woodstox的StAX 2 (Streaming API for XML)解析XML

StAX (Streaming API for XML)面向流的拉式解析XML,速度快、占用资源少,非常合适处理大数据量的xml文件。

详细教程和说明可以参见以下几篇文章:

使用 StAX 解析 XML,第 1 部分: Streaming API for XML (StAX) 简介 
http://www.ibm.com/developerworks/cn/xml/x-stax1.html

使用 StAX 解析 XML,第 2 部分: 拉式解析和事件 
http://www.ibm.com/developerworks/cn/xml/x-stax2.html

使用 StAX 解析 XML,第 3 部分: 使用定制事件和编写 XML 
http://www.ibm.com/developerworks/cn/xml/x-stax3.html

Java6.0新特性之StAX--全面解析Java XML分析技术 
http://zangweiren.iteye.com/blog/647334

Geronimo 叛逆者: 使用集成软件包:Codehaus 的 Woodstox 
http://www.ibm.com/developerworks/cn/opensource/os-ag-renegade15/

本文的目的是说明Woodstox包中的StAX2应用。 
Woodstox官网http://woodstox.codehaus.org/

下载woodstox-core.jar,核心包有两种开源协议apache的ASL和流行的LGPL,同时woodstox-core.jar需要stax2-api.jar的支持

stax2和stax有些不同,且对原来stax的代码不兼容

读取操作:

Java代码  

    1. public XMLStreamReader2 getStreamReader(String xmlStr) throws XMLStreamException {
    2. XMLInputFactory2 xmlif = (XMLInputFactory2) XMLInputFactory2
    3. .newInstance();
    4. xmlif.setProperty(XMLInputFactory.IS_REPLACING_ENTITY_REFERENCES,
    5. Boolean.FALSE);
    6. xmlif.setProperty(XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES,
    7. Boolean.FALSE);
    8. xmlif.setProperty(XMLInputFactory.IS_COALESCING, Boolean.FALSE);
    9. xmlif.configureForSpeed();
    10. XMLStreamReader2 xmlr = (XMLStreamReader2) xmlif.createXMLStreamReader(new BufferedReader(new StringReader(xmlStr)));
    11. return xmlr;
    12. }
    13. public XMLStreamReader2 getStreamReader(InputStream is) throws XMLStreamException, IOException {
    14. XMLInputFactory2 xmlif = (XMLInputFactory2) XMLInputFactory2
    15. .newInstance();
    16. xmlif.setProperty(XMLInputFactory.IS_REPLACING_ENTITY_REFERENCES,
    17. Boolean.FALSE);
    18. xmlif.setProperty(XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES,
    19. Boolean.FALSE);
    20. xmlif.setProperty(XMLInputFactory.IS_COALESCING, Boolean.FALSE);
    21. xmlif.configureForSpeed();
    22. XMLStreamReader2 xmlr = (XMLStreamReader2) xmlif.createXMLStreamReader(new BufferedReader(new InputStreamReader(is, "UTF-8")));
    23. return xmlr;
    24. }
    25. XMLStreamReader2 xmlsr = null;
    26. try {
    27. xmlsr = this.getStreamReader(str);
    28. int eventType = xmlsr.getEventType();
    29. list = new ArrayList<OfcardMainclass>();
    30. // 包装大类数据
    31. OfcardMainclass classof = null;
    32. while (xmlsr.hasNext()) {
    33. eventType = xmlsr.next();
    34. switch (eventType) {
    35. case XMLEvent2.START_ELEMENT:
    36. String name = xmlsr.getName().getLocalPart();
    37. if (name.equals("aa"))
    38. String s1 = xmlsr.getElementText();
    39. if (name.equals("bb"))
    40. String s2 = xmlsr.getAttributeValue(null, "att"));
    41. break;
    42. case XMLEvent2.END_ELEMENT:
    43. if (xmlsr.getName().getLocalPart().equals(
    44. "aa"))
    45. break;
    46. }
    47. }
    48. } finally {
    49. if (xmlsr != null)
    50. xmlsr.close();
    51. }
时间: 2024-10-25 21:36:56

基于Woodstox的StAX 2 (Streaming API for XML)解析XML的相关文章

基于oracle SQL Developer Data Modeler建模工具,解析xml,生成etljet代码

今天准备在 @zhangkai05 写的小工具model_sql基础上,进一步完善功能,使其更加自动化.方便建模人员开发etl任务. 源代码更改后 ,会发布到 git(url地址)上,逐步完善. 描述现状及问题 团队 数据仓库建模在2013年下开始使用 oracle sql developser datamodeler建模工具,之前一直用 powerdesigner,但由于后者是商业收费软件,公司又不打算购买.故经过调研,转向oracle建模工具.虽然其 易用性与 power designer

xml解析之stax

博文引自:http://zangweiren.iteye.com/blog/647334 Java 6.0对XML支持的新特性有许多方面.比如StAX.针对XML-Web服务的Java架构(JAX-WS)2.0.针对XML绑定的API(JAXB)2.0.XML数字签名API,甚至还支持SQL:2003 'XML'数据类型.在这一篇文章中我们将要介绍的是StAX技术,因为它在我们的开发中将被使用地更加频繁. StAX是Streaming API for XML的缩写,是一种针对XML的流式拉分析A

salesforce零基础学习(八十五)streaming api 简单使用(接近实时获取你需要跟踪的数据的更新消息状态)

Streaming API参考链接: https://trailhead.salesforce.com/en/modules/api_basics/units/api_basics_streaming https://resources.docs.salesforce.com/210/latest/en-us/sfdc/pdf/api_streaming.pdf 背景:工作中我们有可能会有这样相关的需求:某些数据很重要,需要实时监控是否有变化,或者某些数据在其他的平台有集成.如果有变化,不刷新页

Spark(十) -- Spark Streaming API编程

本文测试的Spark版本是1.3.1 Spark Streaming编程模型: 第一步: 需要一个StreamingContext对象,该对象是Spark Streaming操作的入口 ,而构建一个StreamingContext对象需要两个参数: 1.SparkConf对象:该对象是配置Spark 程序设置的,例如集群的Master节点,程序名等信息 2.Seconds对象:该对象设置了StreamingContext多久读取一次数据流 第二步: 构建好入口对象之后,直接调用该入口的方法读取各

基于百度风云榜开发的API数据接口-为APP资讯资讯服务

是基于百度搜索风云榜采集的新闻信息,,该资讯会更好的体现人们关注的人多事件与热词 通过数据采集,同时发布相信的数据开放API接口 1.取得热词信息列表 如:api.yi18.net/top/list 2.取得热词信息详细 如:api.yi18.net/top/show?id=1 更多的API文档 doc.yi18.net/topwendang 数据镜像网站:  top.yi18.net API数据接口的免费开放,希望为更多的APP开发者提供更专业的数据 接口.为APP开发提供更简单的新闻热点板块

【转】基于laravel制作APP接口(API)

这篇文章主要介绍了基于laravel制作APP接口(API)的相关资料,需要的朋友可以参考下 前期准备 前言,为什么做以及要做个啥本人姓小名白,不折不扣编程届小白一名,但是自从大一那会儿接触到编程这件奇妙的事情,就完完全全的陷入的程序的世界. 这不,最近又开始折腾APP了,话说现在开发一款APP真是容易,只用JavaScript和一点点HTML+css技术就可以完成.但是做APP的后台就不一样了.开发了APP,想让读点数据进去,那我们就要去开发个后台了. laravel框架,是我最喜欢的PHP框

Jackson Streaming API to read and write JSON

Jackson supports read and write JSON via high-performance Jackson Streaming APIs, or incremental mode. Read this Jackson Streaming APIs document for detail explanation on the benefit of using streaming API. Jackson’s streaming processing is high-perf

[转载] 使用StAX解析xml

StAX 概述 从一开始,Java API for XML Processing (JAXP) 就提供了两种方法来处理 XML:文档对象模型(DOM)方法是用标准的对象模型表示 XML 文档:Simple API for XML (SAX) 方法使用应用程序提供的事件处理程序来处理 XML.JSR-173 提出了一种面向流的新方法:Streaming API for XML (StAX).其最终版本于 2004 年 3 月发布,并成为了 JAXP 1.4(将包含在即将发布的 Java 6 中)的

Stax解析XML的简单实例

关键字解释: Stax:Streaming API for XML(用于读写XML的流接口) xml文件代码: <?xml version="1.0"?> <service> <item> <task>test</task> <strategy>repeat</strategy> </item> <item> <task>WebpageRespTask</tas