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