`

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 文档吧

相关推荐

    java xml 4 种 解析xml 方法 sax jdom dom stAX

    为了处理XML文档,Java提供了多种解析方法,包括SAX(Simple API for XML)、JDOM(Java Document Object Model)、DOM(Document Object Model)以及stAX(Streaming API for XML)。下面将详细介绍这四种解析XML的...

    DOM、SAX、DOM4J、JDOM、StAX生成XML并返回XML字符串形式

    为了处理XML文档,有多种解析器可供选择,其中包括DOM、SAX、DOM4J、JDOM和StAX。这些解析器各有特点,适用于不同的场景。下面将详细介绍这些解析器的工作原理以及它们在生成XML并返回XML字符串形式时的应用。 1. ...

    生成、解析xml的四种方式(dom,dom4j,sax,jdom)

    DOM4J不仅支持DOM,还支持SAX和StAX解析器,且提供了一种更简洁的API来处理XML。DOM4J特别适合处理大型XML文档,因为它允许分块读取,降低了内存需求。 3. SAX(Simple API for XML) SAX是一种基于事件驱动的解析...

    dom4j和jdom的jar包

    DOM4J和JDOM是两种常用的Java XML处理库,它们都是为了方便开发者解析、操作和创建XML文档。本文将深入探讨这两个库的核心概念、特点以及它们在处理XML时的异同。 首先,DOM4J是一个非常灵活且功能强大的Java XML ...

    Java的Dom4j和JDom的jar包

    Java在处理XML文档时,经常会使用到解析库,其中Dom4j和JDom是两个非常重要的选择。这两个库都是基于Java的DOM(Document Object Model)实现,提供了方便的方式来读取、写入、修改XML文件。下面我们将详细探讨这两...

    jdom,jaxb,dom4j,dom,sax,satx解析XML

    在Java中,有多种库和技术用于解析XML文档,包括JDOM、JAXB、DOM4J、DOM、SAX和StaX。接下来我们将详细探讨这些解析方式。 1. JDOM JDOM是Java Document Object Model的简称,它为Java提供了本地化的XML API。JDOM...

    XML-java.rar_XML SAX_sax_sax xml_sax 解析 xml_xml using dom

    4. **JOM4J**:JOM4J(也称为OxM4J)是另一个高效的XML处理库,它提供了DOM、SAX和StAX的实现,以及XPath和XSLT支持。JOM4J以高性能著称,对于大型XML文档的处理非常有优势。 压缩包中的"XML文档解析"可能包含以下...

    解析XML的四种JAR包jdom.jar、SAX.jar、dom4j.jar、dom.jar

    在Java编程中,解析XML文档是常见的需求,为此,有多种库可供选择,其中包括jdom.jar、SAX.jar、dom4j.jar和dom.jar。这些JAR包提供了不同的API和解析策略,各有优缺点。接下来,我们将深入探讨这四种XML解析器。 1...

    xml数据前后台解析:jdom与dom4j源码,程序可以跑

    2. **DOM4J**:DOM4J是另一个流行的Java XML解析库,它不仅支持DOM,还支持SAX和StAX解析。DOM4J提供了更为灵活的API,可以方便地进行XML的读写操作。以下是一个使用DOM4J读取XML文档的例子: ```java ...

    \"java xml 四\"之JDOM、DOM4J解析XML总结

    本篇文章主要聚焦于Java中解析XML的两种流行库——JDOM和DOM4J的总结。我们将深入探讨它们的工作原理、优缺点以及如何在实际项目中使用它们。 首先,让我们了解一下JDOM。JDOM是Java专门针对XML设计的一个解析库,...

    jdom+dom4j

    DOM4J是另一个流行的Java XML API,它不仅提供了DOM(Document Object Model)接口,还支持SAX(Simple API for XML)和StAX(Streaming API for XML)。DOM4J的设计目标是提供一个轻量级、高性能且功能丰富的XML...

    jdom dom4j JAR包

    接着,我们来看`dom4j`,这是一个非常流行的Java XML API,它不仅支持DOM,还支持SAX和StAX解析器,以及XPath查询。与JDOM类似,dom4j也提供了方便的API来处理XML文档,但它在灵活性和功能上更胜一筹。`dom4j-1.6.1....

    dom4j-jdom.rar

    DOM4J不仅支持DOM(Document Object Model)和SAX(Simple API for XML),还支持StAX(Streaming API for XML)和JDOM接口。DOM4J的灵活性在于其允许开发者根据需求选择最适合的解析方式。例如,DOM模型适合处理...

    java dom4j解析xml

    DOM4J是Java中一个非常强大的XML处理库,它结合了DOM、SAX和JDOM的优点,同时也弥补了它们在某些方面的不足。 1. **DOM4J基本概念** - DOM4J是一种Java库,它为处理XML、XPath和XSLT提供了一种简单和高性能的方法...

    java用dom4j解析xml

    XML解析方法主要有四种:DOM(文档对象模型)、SAX(简单API for XML)、StAX(流式API for XML)以及DOM4J。每种方法都有其特定的优势和适用场景。 1. DOM解析: DOM解析器将整个XML文档加载到内存中,形成一个树...

    java 解析XML性能对比分析Demo

    DOM4J是另一个流行的Java XML处理库,提供了灵活的API,支持DOM、SAX和StAX解析方式。它具有强大的XPath支持,易于学习,适合复杂查询,但内存消耗介于DOM和SAX之间。 5. JAXB(Java Architecture for XML Binding...

    DOM4J and JDOM.rar

    DOM4J和JDOM是两种流行的Java XML处理库,它们都是用于解析、操作和生成XML文档的工具。在Java世界中,XML作为一种数据交换格式,广泛应用于配置文件、数据传输和文档存储等领域。理解DOM4J和JDOM的特性和用途对于...

    java jdom解析xml

    - **优点**:JDOM提供了对XML的高性能访问,支持XPath查询,且完全基于Java,无需依赖其他库,如DOM或SAX。 2. **JDOM基本结构** - **Element(元素)**:XML文档中的每一个节点,可以包含子元素、属性和文本。 ...

    dom jdom dom4j 案例

    DOM4J是另一个流行的Java XML处理库,它不仅支持DOM,还支持SAX和StAX解析方式。DOM4J的设计目标是提供简单易用的API,同时保持高性能。DOM4J提供了丰富的功能,如XPath查询、XML文档的动态修改等。在实际项目中,...

    DOM JDOM dom4j 实例源码

    dom4j是另一个流行的Java XML处理库,它不仅支持DOM模型,还提供了SAX和StAX的接口。dom4j的优势在于它的灵活性和强大的功能,例如,它支持XPath查询,可以方便地解析和修改XML文档。同时,dom4j的API设计也比JDOM和...

Global site tag (gtag.js) - Google Analytics