http://xml.apache.org/commons/
-commons is focussed on common code and guidelines for projects. The first focus will be to organize and have common packaging for the various externally-defined standards code relating to - things like the DOM, SAX, and JAXP interfaces.
As the
-commons community forms, we also hope to serve as a holding area for other common -related utilities and code, and to help promulgate common packaging, testing, documentation, and other guidelines across all .apache.org subprojects.
Betwixt Services for mapping JavaBeans to documents, and vice versa.
Digester | -to-Java-object mapping utility. |
Jelly | based scripting and processing engine. |
SC | An implementation of the State Chart | specification aimed at creating and maintaining a Java SC engine. It is capable of executing a state machine defined using a SC document, and abstracts out the environment interfaces.
|
|
Framework to define validators and validation rules in an file. |
Java6.0新特性StAX--全面解析
野马(Mustang,Java 6.0代号)相比老虎(Tiger,Java 5.0代号)来说,从性能的提升、脚本语言(Javascript、JRuby、Groovy)的支持、对java.io.File的扩展到桌面应用的增强等各个方面,本领着实大了不少。
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的流式拉分析API。关于对XML进行分析(或解析)的技术,大家一定都不陌生了。
在Java 6.0之前,就已经有四种:
1. DOM:Document Object Model
2. SAX:Simple API for XML
3. JDOM:Java-based Document Object Model
4. DOM4J:Document Object Model for Java
关于它们的解析原理,以及性能和优缺点,
JWSDP是用来开发Web Services、Web应用程序以及Java应用(主要是XML处理)的开发包。它包含的Java API有:
- JAXP:Java API for XML Processing
- JAXB:Java Architecture for XML Binding
- JAX-RPC:Java API for XML-based Remote Procedure Calls
- JAX-WS:Java API for XML Web Services
- SAAJ:SOAP with Attachments API for Java
- JAXR:Java API for XML Registries
- Web Services Registry
JWSDP的早期版本中还包括:
- Java Servlet
- JSP:JavaServer Pages
- JSF:JavaServer Faces
现在,JWSDP已经被GlassFish所替代。
StAX包括两套处理XML的API,分别提供了不同程度的抽象。它们是:基于指针的API和基于迭代器的API。
五、StAX(Streaming API for XML)
流模型中的拉模型分析方式。提供基于指针和基于迭代器两种方式的支持。
1、接口简单,使用方便。
2、采用流模型分析方式,有较好的性能。
1、单向导航,不支持XPath,很难同时访问同一文档的不同部分。
为了比较这五种方式在解析XML文档时的性能表现,我们来创建三个不同大小的XML文档:smallusers.xml(100KB)、 middleusers.xml(1MB)、bigusers.xml(10MB)。我们分别用以上五种解析方式对这三个XML进行解析,然后打印出所有 的用户信息,并分别计算它们所用的时间。测试代码会在文章后面的附件中给出,这里只比较它们的耗时。
单位:s(秒)
100KB | 1MB | 10MB | |
DOM | 0.146s | 0.469s | 5.876s |
SAX | 0.110s | 0.328s | 3.547s |
JDOM | 0.172s | 0.756s | 45.447s |
DOM4J | 0.161s | 0.422s | 5.103s |
StAX Stream | 0.093s | 0.334s | 3.553s |
StAX Event | 0.131s | 0.359s | 3.641s |
由上面的测试结果可以看出,性能表现最好的是SAX,其次是StAX Stream和StAX Event,DOM和DOM4J也有着不错的表现。性能最差的是JDOM。
所以,如果你的应用程序对性能的要求很高,SAX当然是首选。如果你需要访问和控制任意数据的功能,DOM是个很好的选择,而对Java开发人员来讲,DOM4J是更好的选择。
如果只需要做XML文档解析的话,综合性能、易用性、面向对象特征等各方面来衡量,StAX Event无疑是最好的选择。
附录:
附件中包含该文章中用到的全部示例代码,分为两个Eclipse工程:GreatTestProject和XMLTest,均可编译执行。 GreatTestProject是对StAX API的示例代码;而XMLTest所有五种解析方式的使用示例,并可以针对它们做性能测试。其中,XMLTest工程的jar包默认是用maven来管 理的,你可以根据需要修改。
http://www.java3z.com/cwbwebhome/dir1/dir8/StAX-XML.rar
在Android中解析XML数据
http://www.williamhua.com/2009/05/26/xml-parsing-in-android/
在Android中解析XML数据
http://www.williamhua.com/2009/05/26/xml-parsing-in-android/
JAVA解析XML的方式DOM、SAX、DOM4J、JDOM、StAX之详解与比较
http://sundful.iteye.com/blog/734388
http://wghjay.iteye.com/blog/519955
DOM、SAX、DOM4J、JDOM和JDK1.6中新增的StAX生成XML数据格式,并返回XML字符串形式
http://dreams75.iteye.com/blog/512319
http://hi.baidu.com/comdeng/blog/item/76585a165c367b4d20a4e9db.html
这几天正在做一个rss解析的java小程序,需要从指定的一个rss里边分析出文章列表,然后和数据库里边现有文章进行匹配,如果没有被抓取过,则入库。
经高人指点,使用了“Xml Pull Parser” 来进行xml解析,采用了基于文件流的解析方式,一般被用来对xml文档进行快速而高效地解析。通过oracal网站的一篇《Parsing XML Efficiently 》,发现这种解析技术实际上属于StAP的一种。这篇文章对时下的Xml解析技术进行了总结和归纳,对于想进行xml解析的技术人员来说还是具有参考价值的,因此顺带整理翻译了一下。
原文地址:http://www.oracle.com/technology/oramag/oracle/03-sep/o53devxml.html
——————————————————————————
Java 里边解析 xml 一般有三种常用的技术:
1、 Document Object Model (DOM) , W3C 里边一种成熟的标准。
2、 Simple API for XML (SAX) ,第一种被广泛接受的 XML 的 API ,成为事实上的标准。
3、 Streaming API for XML (StAX) ,在 JSR-173 中提到的一种很有前途的新型解析模型。
DOM 解析是基于树结构的,它通过在内存构建整棵文档树,允许完全、动态访问 XML 文档的任何节点。
2 、 SAX
SAX 解析 XML 采用事件驱动的方式。虽然并不是 W3C 的标准,但它的 API 是公认的,很多解析器都是基于它的。当 SAX 解析器读取文档的时候会引发很多事件,这些事件会交给对应的事件处理者 (event handlers) 。三种基本的事件:
1. DTDHandler 访问 XML 的 DTD 内容
2. ErrorHandler 解析错误
3. ContentHandler 访问文档的内容
3、 StAX
StAX 是一种令人振奋的新型解析技术,和 SAX 一样,它也采用了事件驱动模型。不过,在对于事件的处理上, SAX 采用了“推模式”( push modal ),而 StAX 则使用的是“拉模式”( pull model )。说得更加明白一些,就是这样:
SAX 是自己按顺序把整个文档解析完,在它解析的过程,会主动产生事件交给程序中相应的处理函数来处理当前内容;而 StAX 是由程序来驱动整个解析过程,只有当程序发出解析请求的时候,解析器才会告诉相应的事件,然后程序再决定如何处理当前内容。
从这个原理来判断的话, StAX 的实现显然要更加灵活,程序可以选择自己需要处理的部分,而 SAX 则一定会遍历整个文档。而据我的理解,将 StAX 叫成“程序驱动模型”可能更利于理解一些。
最后,来个表格进行一下概述:
技术 |
有利 |
局限 |
适用于 |
DOM Parsing |
1.易于上手 2.丰富的 API ,易于访问 3.整棵树被载入内存,能随机访问节点 |
1.整个文档必须一次解析完 2.载入文档树到内存代价昂贵 3.不利于实现对象类型绑定,需要给所有节点创建单独的类型 |
需要修改 xml 或者用来处理 XSLT (不要用在对 XML 只有读操作的程序中) |
SAX Parsing |
1.没有将整个文档读入内存,内存耗费较低 2.“ 推模式 ” 允许注册多种内容处理器 |
1.没有内建的文档导航支持 2.不能随机访问 XML 文档 3.不支持命名空间 |
对 XML 只有读操作的程序(不要用来操作和修改 XML 文档) |
StAX Parsing |
1.有针对简单和性能的两种解析模式 2.由程序控制解析器,易于支持多输入( easily supporting multiple inputs ) 3.强大的过滤功能有利于数据检索
|
1.没有内建的文档导航支持 2.不能随机访问 XML 文档 3.不支持修改 XML 文档
|
需要对 XML 文档进行流处理而且支持命名空间的程序(不要用来操作和修改 XML 文档) |
end
相关推荐
为了处理XML文档,Java提供了多种解析方法,包括SAX(Simple API for XML)、JDOM(Java Document Object Model)、DOM(Document Object Model)以及stAX(Streaming API for XML)。下面将详细介绍这四种解析XML的...
为了处理XML文档,有多种解析器可供选择,其中包括DOM、SAX、DOM4J、JDOM和StAX。这些解析器各有特点,适用于不同的场景。下面将详细介绍这些解析器的工作原理以及它们在生成XML并返回XML字符串形式时的应用。 1. ...
DOM4J不仅支持DOM,还支持SAX和StAX解析器,且提供了一种更简洁的API来处理XML。DOM4J特别适合处理大型XML文档,因为它允许分块读取,降低了内存需求。 3. SAX(Simple API for XML) SAX是一种基于事件驱动的解析...
DOM4J和JDOM是两种常用的Java XML处理库,它们都是为了方便开发者解析、操作和创建XML文档。本文将深入探讨这两个库的核心概念、特点以及它们在处理XML时的异同。 首先,DOM4J是一个非常灵活且功能强大的Java XML ...
Java在处理XML文档时,经常会使用到解析库,其中Dom4j和JDom是两个非常重要的选择。这两个库都是基于Java的DOM(Document Object Model)实现,提供了方便的方式来读取、写入、修改XML文件。下面我们将详细探讨这两...
在Java中,有多种库和技术用于解析XML文档,包括JDOM、JAXB、DOM4J、DOM、SAX和StaX。接下来我们将详细探讨这些解析方式。 1. JDOM JDOM是Java Document Object Model的简称,它为Java提供了本地化的XML API。JDOM...
4. **JOM4J**:JOM4J(也称为OxM4J)是另一个高效的XML处理库,它提供了DOM、SAX和StAX的实现,以及XPath和XSLT支持。JOM4J以高性能著称,对于大型XML文档的处理非常有优势。 压缩包中的"XML文档解析"可能包含以下...
在Java编程中,解析XML文档是常见的需求,为此,有多种库可供选择,其中包括jdom.jar、SAX.jar、dom4j.jar和dom.jar。这些JAR包提供了不同的API和解析策略,各有优缺点。接下来,我们将深入探讨这四种XML解析器。 1...
2. **DOM4J**:DOM4J是另一个流行的Java XML解析库,它不仅支持DOM,还支持SAX和StAX解析。DOM4J提供了更为灵活的API,可以方便地进行XML的读写操作。以下是一个使用DOM4J读取XML文档的例子: ```java ...
本篇文章主要聚焦于Java中解析XML的两种流行库——JDOM和DOM4J的总结。我们将深入探讨它们的工作原理、优缺点以及如何在实际项目中使用它们。 首先,让我们了解一下JDOM。JDOM是Java专门针对XML设计的一个解析库,...
DOM4J是另一个流行的Java XML API,它不仅提供了DOM(Document Object Model)接口,还支持SAX(Simple API for XML)和StAX(Streaming API for XML)。DOM4J的设计目标是提供一个轻量级、高性能且功能丰富的XML...
接着,我们来看`dom4j`,这是一个非常流行的Java XML API,它不仅支持DOM,还支持SAX和StAX解析器,以及XPath查询。与JDOM类似,dom4j也提供了方便的API来处理XML文档,但它在灵活性和功能上更胜一筹。`dom4j-1.6.1....
DOM4J不仅支持DOM(Document Object Model)和SAX(Simple API for XML),还支持StAX(Streaming API for XML)和JDOM接口。DOM4J的灵活性在于其允许开发者根据需求选择最适合的解析方式。例如,DOM模型适合处理...
DOM4J是另一个流行的Java XML处理库,提供了灵活的API,支持DOM、SAX和StAX解析方式。它具有强大的XPath支持,易于学习,适合复杂查询,但内存消耗介于DOM和SAX之间。 5. JAXB(Java Architecture for XML Binding...
DOM4J是Java中一个非常强大的XML处理库,它结合了DOM、SAX和JDOM的优点,同时也弥补了它们在某些方面的不足。 1. **DOM4J基本概念** - DOM4J是一种Java库,它为处理XML、XPath和XSLT提供了一种简单和高性能的方法...
XML解析方法主要有四种:DOM(文档对象模型)、SAX(简单API for XML)、StAX(流式API for XML)以及DOM4J。每种方法都有其特定的优势和适用场景。 1. DOM解析: DOM解析器将整个XML文档加载到内存中,形成一个树...
DOM4J和JDOM是两种流行的Java XML处理库,它们都是用于解析、操作和生成XML文档的工具。在Java世界中,XML作为一种数据交换格式,广泛应用于配置文件、数据传输和文档存储等领域。理解DOM4J和JDOM的特性和用途对于...
- **优点**:JDOM提供了对XML的高性能访问,支持XPath查询,且完全基于Java,无需依赖其他库,如DOM或SAX。 2. **JDOM基本结构** - **Element(元素)**:XML文档中的每一个节点,可以包含子元素、属性和文本。 ...
DOM4J是另一个流行的Java XML处理库,它不仅支持DOM,还支持SAX和StAX解析方式。DOM4J的设计目标是提供简单易用的API,同时保持高性能。DOM4J提供了丰富的功能,如XPath查询、XML文档的动态修改等。在实际项目中,...
dom4j是另一个流行的Java XML处理库,它不仅支持DOM模型,还提供了SAX和StAX的接口。dom4j的优势在于它的灵活性和强大的功能,例如,它支持XPath查询,可以方便地解析和修改XML文档。同时,dom4j的API设计也比JDOM和...