`

JAVA XML / dom / jdom / dom4j / sax / stax / StAX Stream / StAX Event

    博客分类:
  • Java
阅读更多

http://xml.apache.org/commons/

xml -commons is focussed on common code and guidelines for xml projects. The first focus will be to organize and have common packaging for the various externally-defined standards code relating to XML - things like the DOM, SAX, and JAXP interfaces.

As the xml -commons community forms, we also hope to serve as a holding area for other common xml -related utilities and code, and to help promulgate common packaging, testing, documentation, and other guidelines across all xml .apache.org subprojects.

 

Betwixt Services for mapping JavaBeans to XML documents, and vice versa.

 
Digester XML -to-Java-object mapping utility.
 
Jelly XML based scripting and processing engine.
 
SCXML An implementation of the State Chart XML specification aimed at creating and maintaining a Java SCXML engine. It is capable of executing a state machine defined using a SCXML document, and abstracts out the environment interfaces.

 

Validator

Framework to define validators and validation rules in an xml 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

分享到:
评论
3 楼 andyshaw 2012-04-12  
谢谢
2 楼 siemens800 2009-10-22  
3Q 
1 楼 iRoyce 2009-10-20  
StAX Parsing  支持修改 XML 文档吧

相关推荐

Global site tag (gtag.js) - Google Analytics