从Java1.4开始,大多数的XML处理任务可以在标准版本的类中得以处理,而且Java1.5还添加了很多新工具。如果你正在寻找一个升级你的Java开发工具到1.5版本的理由的话,那么它可以进行XML文档处理的能力就应该是你所需要的全部。
曾经有一段时期,程序员们在尝试使用Java编程来处理XML文档,他们必须从Sun公司、Apache软件组织或者从其他的来源中到处搜寻一个或更多的库文件,并且把这些库添加到他们的Java程序环境中。无论如何,从Java1.4开始,大多数的XML处理任务可以在标准版本的类中得以处理,而且Java1.5还添加了很多新工具。如果你正在寻找一个升级你的Java开发工具到1.5版本的理由的话,那么它可以进行XML文档处理的能力就应该是你所需要的全部。
对XML进行处理基本上划分为两种方式:一次性不间断地读入整个文档,以及分单元的连续地读取文档。Java为进行XML 数据处理提供Java API或者提供JAXP API,它包括一个能够对这两种方式进行处理的标准API。JAXP 1.3是最新的版本,于2004年9月最终定下来。它是在Java1.5标准版本中实现的。
JAXP被设计成为一个独立执行的、便携式的API,也就是说:任何经销商的语法分析工具包,只要它们是符合API规范的,都可以嵌入到一个写API的程序中去。实际上,你很有可能找到符合Java标准版本的语法分析程序以此来满足需要。
大多数人很容易就掌握了文件对象模型(Document Object Model)或者称为DOM,因为它表示成为一个分层的或者是“树”状的结构,就像是在HTML和XHTML文档中使用的一样。使用这种方式,整个文档在读入内存的时候,他的每一个节点都是可以被检查和监控的。监控DOM的关键Java包是org.w3c.dom,其中包含的“ org.w3c”反映出整体实现过程是遵守万维网协会的XML文件对象模型 (DOM)标准(World-Wide Web Consortium XML DOM standard)的。
在org.w3c.dom包中主要的接口是节点Node。在一个DOM 表述中,XML文档中的所有元素都是继承Node接口或者子接口的对象。举例说明,有这样一些接口代表元素、属性、正文以及注释。那么它的DOM表述包含一个互相联系的Java对象的集合,并以此来表示整个XML文档的内容。为节点接口服务的JavaDocs有一个表格,当实现这些接口时,它是用来显示对象的属性的。当你使用DOM写Java程序之前应该熟悉这个表格。
DOM编程模型的优势在于每个元素都可以被有效地定位、监控并且修改。那么编程时使用DOM的缺点是需要处理时间和内存。甚至你仅仅只是读入XML文档的一个简单的元素,那么你也必须把整个文档读入内存中并且进行解析。随着文档越来越大,DOM处理会变得越来越不实用。
使用连续的语法分析并不像前一种方式那样明显,但是它会提供许多的好处。一个连续的语法分析把整个文档分成单元,并且每次只处理一个元素。由程序员决定需要保留哪些信息以及忽略哪些信息。在JAXP库中的连续的语法分析称为XML的简单API或者SAX (Simple API for XML)。David Megginson开发出在W3C之外的为Java编程使用的SAX。在Java库中SAX编程的关键包是org.xml.sax。
一个SAX语法分析程序在XML文档中是这样工作的,当它遇到元素时,它便生成代表这个元素的事件。SAX处理程序包含创建类和方法,并且使用这些类和方法来处理事件、提取所需信息。
Java标准版本提供一些其他的与XML相关API,以此来确保在Java与XML共同使用时可以更加简单快速。所有的这些工具都是建立在JAXP这个基础之上的。那么,其他的文章将会对这些先进工具做出进一步的讨论。
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
相关推荐
-
内存数据网格提供商一头扎进Java
10年的时间里,应用性能解决方案提供商Alachisoft一直在用NCache(针对N-Tier和网格计算.NET应用的内存计算和数据网格产品)为.NET社区服务。
-
遇到这样一个问题:通过java service wrapper部署应用,wrapper进程占用的内存会一直升高, 直到把内存吃完应用崩溃,但是这个wrapper
遇到这样一个问题:通过java service wrapper部署应用,wrapper进程占用的内存会一直升高 […]
-
Google App Engine for Java 对于目前中国需要学习吗?
-
请问CloudStack和Hadoop有什么区别,都是apache的产品有什么不一样吗