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的代码不兼容
读取操作:
public XMLStreamReader2 getStreamReader(String xmlStr) throws XMLStreamException {
XMLInputFactory2 xmlif = (XMLInputFactory2) XMLInputFactory2
.newInstance();
xmlif.setProperty(XMLInputFactory.IS_REPLACING_ENTITY_REFERENCES,
Boolean.FALSE);
xmlif.setProperty(XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES,
Boolean.FALSE);
xmlif.setProperty(XMLInputFactory.IS_COALESCING, Boolean.FALSE);
xmlif.configureForSpeed();
XMLStreamReader2 xmlr = (XMLStreamReader2) xmlif.createXMLStreamReader(new BufferedReader(new StringReader(xmlStr)));
return xmlr;
}
public XMLStreamReader2 getStreamReader(InputStream is) throws XMLStreamException, IOException {
XMLInputFactory2 xmlif = (XMLInputFactory2) XMLInputFactory2
.newInstance();
xmlif.setProperty(XMLInputFactory.IS_REPLACING_ENTITY_REFERENCES,
Boolean.FALSE);
xmlif.setProperty(XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES,
Boolean.FALSE);
xmlif.setProperty(XMLInputFactory.IS_COALESCING, Boolean.FALSE);
xmlif.configureForSpeed();
XMLStreamReader2 xmlr = (XMLStreamReader2) xmlif.createXMLStreamReader(new BufferedReader(new InputStreamReader(is, "UTF-8")));
return xmlr;
}
XMLStreamReader2 xmlsr = null;
try {
xmlsr = this.getStreamReader(str);
int eventType = xmlsr.getEventType();
list = new ArrayList<OfcardMainclass>();
// 包装大类数据
OfcardMainclass classof = null;
while (xmlsr.hasNext()) {
eventType = xmlsr.next();
switch (eventType) {
case XMLEvent2.START_ELEMENT:
String name = xmlsr.getName().getLocalPart();
if (name.equals("aa"))
String s1 = xmlsr.getElementText();
if (name.equals("bb"))
String s2 = xmlsr.getAttributeValue(null, "att"));
break;
case XMLEvent2.END_ELEMENT:
if (xmlsr.getName().getLocalPart().equals(
"aa"))
break;
}
}
} finally {
if (xmlsr != null)
xmlsr.close();
}
分享到:
相关推荐
例如,开发者可以使用woodstox-core-asl-4.1.1.jar作为底层解析器,通过stax-api-1.0.1提供的接口与XML数据交互,同时利用stax2-api-3.1.1的扩展功能来优化处理流程。这种组合在处理大量XML数据的应用,如日志分析、...
用来解析XML文件的jar包。Streaming API for XML (StAX) 的基于事件迭代器 API 无论在性能还是在可用性上都有其他 XML 处理方法所不及的独到之处。使用前请先解压
2. 解析XML:使用`DocumentBuilder`对象的`parse()`方法读取XML文件,返回一个`Document`对象,表示整个XML文档的根节点。 3. 遍历和操作XML:通过`Document`对象访问XML文档的各个部分,如元素(`Element`)、属性...
《woodstox-core-asl与stax2-api:解析XML处理的高效工具》 XML(eXtensible Markup Language)作为一种通用的数据交换格式,在IT行业中广泛应用于数据存储、配置文件和网络通信等领域。为了高效地解析和生成XML...
Java解析XML文件是Java开发中常见的任务,XML(Extensible Markup Language)作为...在实际项目中,还可以结合StAX、Woodstox等其他XML解析库,或者使用Java 8引入的内置XML API(如`javax.xml.stream`包)来解析XML。
三、StAX解析器 StAX(Streaming API for XML)是另一种流式解析方式,介于DOM和SAX之间。它允许开发者以迭代的方式读取或写入XML,既能避免DOM解析的大内存消耗,又比SAX更易于使用。Java中的StAX实现有Woodstox和...
STAX的核心理念是事件驱动,即解析XML时,每遇到一个XML元素或属性,都会触发一个相应的事件,程序通过响应这些事件来处理XML数据。与DOM(Document Object Model)不同,STAX不需要一次性加载整个XML文档到内存,...
本文将详细介绍Java中解析XML的几种主要方法,并进行对比,以帮助开发者选择最适合自己的解决方案。 1. DOM(Document Object Model)解析器: DOM解析器将整个XML文档加载到内存中,构建一个树形结构的DOM节点模型...
本文将深入解析XML的基本概念、结构、解析方法,并介绍与之相关的Java库——Jar包及其源码。 XML的核心是其结构化特性,它通过元素(Element)、属性(Attribute)和文本内容来描述数据。每个XML文档都由一个根元素...
2. **流式API(StAX解析)**: StAX(Streaming API for XML)提供了向前只读的迭代器,允许应用程序通过调用`XMLStreamReader`的下一个事件方法逐个处理XML事件。这种方式允许开发者控制内存使用,因为它只需要...
StAX解析器结合了DOM和SAX的优点,它允许开发者以流式方式读写XML,既可以按需处理数据,又不需要一次性加载整个文档。StAX提供了更高效的处理大型XML文档的能力。在Java中,StAX相关的jar包通常是`stax-api.jar`和...
StAX是一种基于事件驱动的API,它允许程序以流式方式处理XML,从而减少了内存占用,提高了处理大型XML文档时的效率。与DOM模型相比,StAX不需要一次性加载整个XML文档到内存,而是通过事件驱动的方式逐个处理XML元素...
这些是Woodstox库的实现,提供了一个高性能的StAX解析器。 在处理PDM(Product Data Management,产品数据管理)相关的XML数据时,你可能需要解析或生成包含产品信息、设计数据、版本控制等复杂结构的文件。了解和...
这些事件代表了XML文档的结构,解析器通过触发这些事件来构建和解析XML文档。 2. **字符缓冲**:为了提高性能,Woodstox使用了高效的字符缓冲机制。通过预读和复用缓冲区,减少不必要的内存分配和字符串创建。 3. ...
9. Java中解析XML的示例代码: 对于DOM解析,可以使用`javax.xml.parsers.DocumentBuilderFactory`和`org.w3c.dom.Document`来创建和操作XML文档。对于SAX解析,可以实现`org.xml.sax.ContentHandler`接口并注册到`...
4. Woodstox:轻量级的StAX(Streaming API for XML)解析库,适用于大文件和高性能需求。 XML解析的实际应用非常广泛,例如: 1. 数据交换:Web服务(如SOAP)通常使用XML作为数据交换格式。 2. 配置文件:许多...
解析XML有两种主要方法:DOM(Document Object Model)和SAX(Simple API for XML)。 1. DOM解析:DOM将整个XML文档加载到内存中,形成一个树形结构。每个节点代表XML文档的一个部分,可以很容易地通过遍历树来...
以下是使用SAX和StAX解析XML的基本步骤: 1. **SAX解析**: - 创建`DefaultHandler`的子类并重写关键方法,如`startElement`,`endElement`和`characters`。 - 使用`SAXParserFactory`创建`SAXParser`实例。 - ...
- **stax-api** 和 **woodstox-core**:用于StAX解析的库,Woodstox是StAX的高性能实现。 - **xercesImpl**:Apache Xerces是一个开源的XML解析器,提供了DOM、SAX和XSLT的实现。 - **xml-apis**:XML API接口,...
- 并行处理:利用多线程或分布式计算框架(如Hadoop)并行解析XML文件的不同部分。 另外,还可以考虑XML压缩格式,如GZIP或BZIP2,以减少文件大小,降低解析压力。解压缩后,可以使用专为压缩XML设计的库,如Apache...