`

【XML】Java6.0 新特性之StAX--全面解析Java XML分析技术

    博客分类:
  • XML
 
阅读更多
本文转自:http://zangweiren.iteye.com
野马(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

关于它们的解析原理,以及性能和优缺点,我会在本文的结尾做一个简要的介绍。这篇文章中,我们主要说说StAX这种新的解析方式。

首先我们来搞清楚两个概念:推分析和拉分析。

在程序中访问和操作XML文件一般有两种模型:DOM(文档对象模型)和流模型。它们的优缺点如下:

引用

DOM优点:允许编辑和更新XML文档,可以随机访问文档中的数据,可以使用XPath(XML Path Language,是一种从XML文档中搜索节点的查询语言)查询。
DOM缺点:需要一次性加载整个文档到内存中,对于大型文档,会造成性能问题。

引用

流模型优点:对XML文件的访问采用流的概念,在任何时候内存中只有当前节点,解决了DOM的性能问题。
流模型缺点:是只读的,并且只能向前,不能在文档中执行向后导航操作。

关于什么是DOM,文章结尾处会有介绍。这里我们简单说一下流:它是一个连续的字节序列,可以理解为不停地从源头向目标搬运着字节的特殊对象。

让我们回到主题。流模型每次迭代XML文档中的一个节点,适合于处理较大的文档,所耗内存空间小。它有两种变体--“推”模型和“拉”模型。

引用

推模型:就是我们常说的SAX,它是一种靠事件驱动的模型。当它每发现一个节点就引发一个事件,而我们需要编写这些事件的处理程序。这样的做法很麻烦,且不灵活。

引用

拉模型:在遍历文档时,会把感兴趣的部分从读取器中拉出,不需要引发事件,允许我们选择性地处理节点。这大大提高了灵活性,以及整体效率。

到此,我们就弄明白了“推分析”和“拉分析”的概念:
引用
基于流模型中推模型的分析方式称为推分析;基于流模型中拉模型的分析方式就称为拉分析。


StAX就是一种拉分析式的XML解析技术。它也支持对XML文件的生成操作,但是这篇文章里我们只介绍有关解析的知识。

从一开始,JAXP(Java API for XML Processing)就提供了两种方法来处理XML:DOM和SAX。StAX是一种面向流的新方法,最终版本于2004年3月发布,并成为JAXP 1.4(包含在Java 6.0中)的一部分。StAX的实现使用了JWSDP(Java Web Services Development Pack)1.6,并结合了SJSXP(Sun Java System XML Streaming Parser,位于javax.xml.stream.*包中)。

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。

我们先来了解基于指针的API。它把XML作为一个标记(或事件)流来处理,应用程序可以检查解析器的状态,获得解析的上一个标记的信息,然后再处理下一个标记,依次类推。

在开始API探索之前,我们首先创建一个名为users.xml的XML文档用于测试,它的内容如下:


<?xml version="1.0" encoding="UTF-8"?>
<company>
	<depart title="Develop Group">
		<user name="Tom" age="28" gender="male" >Manager</user>
		<user name="Lily" age="26" gender="female" />
	</depart>
	<depart title="Test Group">
		<user name="Frank" age="32" gender="male" >Team Leader</user>
		<user name="Bob" age="45" gender="male" />
		<user name="Kate" age="25" gender="female" />
	</depart>
</company>

可以让我们使用基于指针的API的接口是javax.xml.stream.XMLStreamReader(很遗憾,你不能直接实例化它),要得到它的实例,我们需要借助于javax.xml.stream.XMLInputFactory类。根据JAXP的传统风格,这里使用了抽象工厂(Abstract Factory)模式。如果你对这个模式很熟悉的话,就能够在脑海中想象出我们将要编写的代码的大致框架了。

首先,获得一个XMLInputFactory的实例。方法是:
分享到:
评论

相关推荐

    Java6.0新特性之StAX--全面解析Java XML分析技术

    Java 6.0引入了许多新特性,其中一项重要的更新是增强了对XML处理的支持,特别是引入了Streaming API for XML(简称StAX)。StAX提供了一种高效且内存友好的方式来处理XML文档,使得开发者能够在不加载整个XML文档到...

    JAVA6.0帮助文档

    Java 6.0强化了对XML的支持,包括DOM、SAX和StAX解析器,以及JAXB用于对象与XML之间的绑定。`javax.xml.transform`包提供了转换XML文档的能力。 总结来说,"JAVA6.0帮助文档"涵盖了Java 6.0的各个方面,从基本语法...

    【最新编排】全面解析JAVA XML分析技术.doc

    Java XML分析技术是Java开发中处理XML文档的重要手段,尤其在Java 6.0版本之后,引入了更多针对XML的支持,如StAX(Streaming API for XML)、JAX-WS 2.0、JAXB 2.0和XML数字签名API等。在本文中,我们将深入探讨...

    java6.0源码-pierce-oneill-cv:我的简历

    8. **XML处理的提升**:Java 6.0引入了新的StAX(Streaming API for XML)API,允许更高效的XML处理,同时DOM和SAX也有所改进。 9. **安全增强**:Java 6.0的安全模型进行了强化,包括对数字证书的处理、网络通信...

    jdk6.0-04.zip

    JDK 6.0引入了全新的StAX(Streaming API for XML)API,允许开发者以事件驱动的方式解析和生成XML文档,减少了内存占用,提高了处理大型XML文档的效率。 六、数据库连接池 JDBC连接池的API(java.sql.DataSource)...

    JDK6.0新特性(转过来的)

    **JDK 6.0 新特性详解** JDK 6.0,全称为Java Development Kit 6.0,是Oracle公司发布的Java平台标准版(Java SE)的重要版本,它引入了一系列增强功能,提升了开发效率、性能和兼容性。以下是这个版本的一些核心新...

    java jdk6.0源码+深入java虚拟机第二版

    3. **语言特性**:JDK 6.0支持了枚举类型、泛型、注解、静态导入等新特性。枚举类型增强了类型安全,泛型简化了类型转换,注解提供了元数据功能,静态导入则减少了命名冲突。 4. **安全管理**:JDK 6.0的安全管理器...

    JDK_API_1_6_zh_CN.rar_JAVA6.0 API_

    - **DOM、SAX和StAX解析器**:提供了解析和操作XML文档的不同方式。 - **JAXB**:用于XML与Java对象之间的绑定,方便XML数据的序列化和反序列化。 7. **安全管理** - **Java安全模型**:加强了安全管理框架,...

    JAVA6.0 FOR WIN(32+64)[jre-6u16-windows-i586/jre-6u29-windows-x64]

    Java 6.0是Oracle公司推出的Java平台标准版(Java SE)的一个重要版本,它包含了JRE(Java Runtime Environment)和JDK(Java Development Kit)。这个压缩包提供了针对Windows操作系统的两个不同架构的JRE安装程序...

    java安装程序,6.0

    6. **XML处理改进**:Java 6.0加强了XML处理,例如StAX(Streaming API for XML)的集成,提供了更高效和低内存占用的XML解析方式。 7. **改进的安全性**:Java 6.0增强了安全框架,提供了更多的安全控制,比如更新...

    java api 文档6.0

    - **try-with-resources**:这是Java 6引入的一个新特性,允许自动关闭实现了`AutoCloseable`接口的资源,提高了代码的可读性和安全性。 - **枚举套接字选项**:通过`SocketOptions`枚举,为套接字增加了更多的...

    JDK6.0-windows-i586

    4. **XML处理的提升**:更新了DOM、SAX和StAX解析器,提高了XML处理的效率和易用性。 5. **Web服务支持**:提供了对Java API for RESTful Web Services (JAX-RS) 1.0的支持,使得开发RESTful服务变得更加简单。 6....

    java6.0源码-lussumo-vanilla:从code.google.com/p/lussumo-vanilla自动导出

    5. **改进的XML处理**:Java 6.0 引入了 JAXB 2.0 和 StAX,简化了XML数据的绑定和流式处理。 6. **JavaScript引擎Rhino**:内置了JavaScript引擎Rhino,使得在Java应用程序中嵌入和执行JavaScript代码成为可能。 ...

    JAVA SE6.0 API文档

    Java SE 6.0(也称为Java 6)是Java平台标准版的一个重大版本,它在2006年发布,带来了许多新特性和改进。API(Application Programming Interface)文档是开发者理解和使用Java编程语言的重要参考资料,它详细阐述...

    java jdk6 32位

    - **XML处理**:提升了SAX和StAX API的性能,使得XML解析更快。 - **改进的类型注解**:引入了类型注解,增强了代码的静态分析和工具支持。 4. **开发工具**: JDK 6包含了一系列开发工具,如: - **javac**:...

    J2SE6.0 API 中文版(冷冬大雪)

    7. **XML处理**:提供了更高效的DOM解析器和SAX解析器,以及StAX(Streaming API for XML)的集成,提升了XML数据处理的效率。 8. **改进的编译器和虚拟机**:Java HotSpot虚拟机的性能得到显著提升,编译器也进行...

    java6.0源码-Laba14:新的

    Java 6.0 源码分析 - Laba14: 新特性与改进 Java 6.0,作为Java平台的重要版本,引入了一系列的新特性和性能优化,为开发者提供了更强大的工具和更好的性能体验。在Laba14的源码中,我们可以深入探讨这些关键改进,...

    [Java参考文档].JDK6.0API官方中文版.zip

    9. **XML处理**:JDK6.0对XML处理进行了优化,如SAX和StAX解析器的性能提升,以及JAXB(Java Architecture for XML Binding)的改进,使得XML数据绑定更加便捷。 10. **Java应用程序启动器**:JDK6.0改进了`javaw....

    JavaSE-6.0-英文手册(2008/11/30_FullUpdate)

    javax.xml.transform.stax javax.xml.transform.stream javax.xml.validation javax.xml.ws javax.xml.ws.handler javax.xml.ws.handler.soap javax.xml.ws.http javax.xml.ws.soap javax.xml.ws.spi javax...

Global site tag (gtag.js) - Google Analytics