本文转自: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的实例。方法是:
分享到:
相关推荐
Java 6.0引入了许多新特性,其中一项重要的更新是增强了对XML处理的支持,特别是引入了Streaming API for XML(简称StAX)。StAX提供了一种高效且内存友好的方式来处理XML文档,使得开发者能够在不加载整个XML文档到...
Java 6.0强化了对XML的支持,包括DOM、SAX和StAX解析器,以及JAXB用于对象与XML之间的绑定。`javax.xml.transform`包提供了转换XML文档的能力。 总结来说,"JAVA6.0帮助文档"涵盖了Java 6.0的各个方面,从基本语法...
Java XML分析技术是Java开发中处理XML文档的重要手段,尤其在Java 6.0版本之后,引入了更多针对XML的支持,如StAX(Streaming API for XML)、JAX-WS 2.0、JAXB 2.0和XML数字签名API等。在本文中,我们将深入探讨...
8. **XML处理的提升**:Java 6.0引入了新的StAX(Streaming API for XML)API,允许更高效的XML处理,同时DOM和SAX也有所改进。 9. **安全增强**:Java 6.0的安全模型进行了强化,包括对数字证书的处理、网络通信...
JDK 6.0引入了全新的StAX(Streaming API for XML)API,允许开发者以事件驱动的方式解析和生成XML文档,减少了内存占用,提高了处理大型XML文档的效率。 六、数据库连接池 JDBC连接池的API(java.sql.DataSource)...
**JDK 6.0 新特性详解** JDK 6.0,全称为Java Development Kit 6.0,是Oracle公司发布的Java平台标准版(Java SE)的重要版本,它引入了一系列增强功能,提升了开发效率、性能和兼容性。以下是这个版本的一些核心新...
3. **语言特性**:JDK 6.0支持了枚举类型、泛型、注解、静态导入等新特性。枚举类型增强了类型安全,泛型简化了类型转换,注解提供了元数据功能,静态导入则减少了命名冲突。 4. **安全管理**:JDK 6.0的安全管理器...
- **DOM、SAX和StAX解析器**:提供了解析和操作XML文档的不同方式。 - **JAXB**:用于XML与Java对象之间的绑定,方便XML数据的序列化和反序列化。 7. **安全管理** - **Java安全模型**:加强了安全管理框架,...
Java 6.0是Oracle公司推出的Java平台标准版(Java SE)的一个重要版本,它包含了JRE(Java Runtime Environment)和JDK(Java Development Kit)。这个压缩包提供了针对Windows操作系统的两个不同架构的JRE安装程序...
6. **XML处理改进**:Java 6.0加强了XML处理,例如StAX(Streaming API for XML)的集成,提供了更高效和低内存占用的XML解析方式。 7. **改进的安全性**:Java 6.0增强了安全框架,提供了更多的安全控制,比如更新...
- **try-with-resources**:这是Java 6引入的一个新特性,允许自动关闭实现了`AutoCloseable`接口的资源,提高了代码的可读性和安全性。 - **枚举套接字选项**:通过`SocketOptions`枚举,为套接字增加了更多的...
4. **XML处理的提升**:更新了DOM、SAX和StAX解析器,提高了XML处理的效率和易用性。 5. **Web服务支持**:提供了对Java API for RESTful Web Services (JAX-RS) 1.0的支持,使得开发RESTful服务变得更加简单。 6....
5. **改进的XML处理**:Java 6.0 引入了 JAXB 2.0 和 StAX,简化了XML数据的绑定和流式处理。 6. **JavaScript引擎Rhino**:内置了JavaScript引擎Rhino,使得在Java应用程序中嵌入和执行JavaScript代码成为可能。 ...
Java SE 6.0(也称为Java 6)是Java平台标准版的一个重大版本,它在2006年发布,带来了许多新特性和改进。API(Application Programming Interface)文档是开发者理解和使用Java编程语言的重要参考资料,它详细阐述...
- **XML处理**:提升了SAX和StAX API的性能,使得XML解析更快。 - **改进的类型注解**:引入了类型注解,增强了代码的静态分析和工具支持。 4. **开发工具**: JDK 6包含了一系列开发工具,如: - **javac**:...
7. **XML处理**:提供了更高效的DOM解析器和SAX解析器,以及StAX(Streaming API for XML)的集成,提升了XML数据处理的效率。 8. **改进的编译器和虚拟机**:Java HotSpot虚拟机的性能得到显著提升,编译器也进行...
Java 6.0 源码分析 - Laba14: 新特性与改进 Java 6.0,作为Java平台的重要版本,引入了一系列的新特性和性能优化,为开发者提供了更强大的工具和更好的性能体验。在Laba14的源码中,我们可以深入探讨这些关键改进,...
9. **XML处理**:JDK6.0对XML处理进行了优化,如SAX和StAX解析器的性能提升,以及JAXB(Java Architecture for XML Binding)的改进,使得XML数据绑定更加便捷。 10. **Java应用程序启动器**:JDK6.0改进了`javaw....
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...