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的代码不兼容

读取操作:

    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. }

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

  1. xml解析之stax

    博文引自:http://zangweiren.iteye.com/blog/647334 Java 6.0对XML支持的新特性有许多方面.比如StAX.针对XML-Web服务的Java架构(JAX-W ...

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

    Streaming API参考链接: https://trailhead.salesforce.com/en/modules/api_basics/units/api_basics_streaming ...

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

    这篇文章主要介绍了基于laravel制作APP接口(API)的相关资料,需要的朋友可以参考下 前期准备 前言,为什么做以及要做个啥本人姓小名白,不折不扣编程届小白一名,但是自从大一那会儿接触到编程这件 ...

  4. Twitter REST API, Streaming API

    原文链接           用Twitter自己的话来说:   REST API The REST API provides simple interfaces for most Twitter f ...

  5. 【337】Text Mining Using Twitter Streaming API and Python

    Reference: An Introduction to Text Mining using Twitter Streaming API and Python Reference: How to R ...

  6. Jackson Streaming API to read and write JSON

    Jackson supports read and write JSON via high-performance Jackson Streaming APIs, or incremental mod ...

  7. Spark(十) -- Spark Streaming API编程

    本文测试的Spark版本是1.3.1 Spark Streaming编程模型: 第一步: 需要一个StreamingContext对象,该对象是Spark Streaming操作的入口 ,而构建一个S ...

  8. [转载] 使用StAX解析xml

    StAX 概述 从一开始,Java API for XML Processing (JAXP) 就提供了两种方法来处理 XML:文档对象模型(DOM)方法是用标准的对象模型表示 XML 文档:Simp ...

  9. [置顶] stax解析xml文档的6种方式

    原文链接:http://blog.csdn.net/u011593278/article/details/9745271 stax解析xml文档的方式: 基于光标的查询: 基于迭代模型的查找: 基于过 ...

随机推荐

  1. PHP $_SERVER 祥细解读(有事例)

    为了看的更明白,添加上了事例 例如  'www.ceshiyuming.com/ceshi.php?p=123';Array(    [HOSTNAME] =>     [PATH] => ...

  2. 创建一个包括菜单栏,工具栏,状态栏,文本编辑部件的经典GUI应用程序的骨架

    效果如下: 代码如下: #!/usr/bin/python3 # -*- coding: utf-8 -*- """ This program creates a ske ...

  3. bzoj1047 理想的正方形

    Description 有一个a*b的整数组成的矩阵,现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和最小值的差最小. Input 第一行为3个整数,分别表示a,b,n的值第二行至第 ...

  4. nginx和apache最核心的区别在于apache是同步多进程模型,一个连接对应一个进程;nginx是异步的,多个连接(万级别)可以对应一个进程

    nginx和apache的一些优缺点比较,摘自网络,加自己的一些整理. nginx相对于apache的优点: 1.轻量级,同样是web 服务,比apache 占用更少的内存及资源 2.抗并发,ngin ...

  5. 服务注册发现Eureka之三:Spring Cloud Ribbon实现客户端负载均衡(客户端负载均衡Ribbon之三:使用Ribbon实现客户端的均衡负载)

    在使用RestTemplate来消费spring boot的Restful服务示例中,我们提到,调用spring boot服务的时候,需要将服务的URL写死或者是写在配置文件中,但这两种方式,无论哪一 ...

  6. 版本管理工具---svn搭建与使用

    SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS.CVS,它采用了分支管理系统,它的设计目标就是取代CVS.互联网上很多版本控制服务已从CVS迁移到Subversion ...

  7. JVM内部细节之二:偏向锁(Biased Locking)

    在前面一片文章<JVM内部细节之一:synchronized关键字及实现细节>中已经提到过偏向锁的概念,在理解什么是偏向锁前必须先理解什么是轻量级锁(Lightweight Locking ...

  8. redis存储对象

      redis主要存储类型最常用的五种数据类型: String Hash List Set Sorted set redis存储对象序列化和反序列化 首先来了解一下为什么要实现序列化 为什么要实现序列 ...

  9. CYQ.Data 轻量数据层之路 使用篇二曲 MAction 数据查询(十三)----002

    原文链接:https://blog.csdn.net/cyq1162/article/details/53303390 前言说明: 本篇继续上一篇内容,本节介绍所有相关查询的使用. 主要内容提要: 1 ...

  10. mysql5.6下载&安装

    官网下载即可: mysql-installer-community-5.6.25.0.msi 安装: 1. 2. 3.在这里我们需要从安装程序提供的可安装的产品(Products)中选择我们需要的my ...