本文中让我们介绍Java标准版中用于XML处理的类,即JAXP——Java API for XML Processing中两种新的替代品并解释为什么一些Java程序员更喜欢使用它们。 JDOM取代DOM Jason Hunter和Brett McLaughlin是JDOM项目的源作者。他们感到在JAXP中使用W3C编程API中的文档对象模型(Document Object Model, DOM)非常复杂,而且其编程习惯让很多程序员觉得不舒服。JDOM的设计目标就是在读和创建XML时简化它,并能完成大多数普通任务,同时尽量使用人们熟悉的Java特性。
在开发了若干年……
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
本文中让我们介绍Java标准版中用于XML处理的类,即JAXP——Java API for XML Processing中两种新的替代品并解释为什么一些Java程序员更喜欢使用它们。
JDOM取代DOM
Jason Hunter和Brett McLaughlin是JDOM项目的源作者。他们感到在JAXP中使用W3C编程API中的文档对象模型(Document Object Model, DOM)非常复杂,而且其编程习惯让很多程序员觉得不舒服。JDOM的设计目标就是在读和创建XML时简化它,并能完成大多数普通任务,同时尽量使用人们熟悉的Java特性。在开发了若干年之后,2004年发布了JDOM1.0版。
JDOM使用了Java对象,因此是专门针对Java的而不是针对org.w3c.dom接口的一般定义。但是,JDOM并非完全取代了JAXP。它并不包含解析器,而是使用与JAXP兼容的任何SAX解析器。此外,它提供了一种特性,能够让JDOM代码与用JAXP编写的代码协作。而且,还有一些简单方法用于文档的JDOM模型与DOM模型之间的相互转换。
JDOM使用了程序员过去习惯使用的Java语言特性。例如,XML元素的集合可以用大家熟悉的List和Iterator接口来操作。相比之下,JAXP中的W3C编程模型则用NodeList接口来表示Node对象的集合,这种访问模型很别扭。
依我之见,JDOM对那些需要尽可能迅速简单地产生XML文档的Java程序员具有很大的吸引力。用创建对象来代表XML文档,即简单又如何逻辑,而且还能直接把元素组合成完整的文挡。当要把文档或文档的一部分输出到某个文件时,String对象或类似网络连接流又能通过XMLOutputter类很方便的进行处理。
StAX取代SAX
当使用SAX处理一个XML文档时,程序员把类和事件处理方法连接到解析器上,然后手动控制解析器。对XML文档的每个元素来说,解析器要在事件被处理后返回给解析器一个值,这被称为匹配了一个事件处理方法。这种方法让程序员觉得总在响应外部事件,其实这是一种不自然不方便的编程风格。这种不方便的例子就是每当停下解析器,你都要在事件处理方法中抛出一个异常。
SAX被称为是“推模型”解析器,因为它把事件推给程序员的事件处理代码。StAX的目的就是让控制反转。一旦创建了StAX解析器,程序员就能请求下一个事件。所以StAX是一个“拉模型”解析器。
对下一个事件的请求被包装成一个实现了XMLEvent接口的Java类。这些专门的接口与SAX中专门的事件处理方法功能相同,它们能告诉你解析器遇到了什么类型的XML标签以及其中包含的信息。例如,SAX方法startElement()就需要元素的名字和属性来调用,而在StAX中,事件对象会实现StartElement接口,其中就包含了能得到同样信息的方法。
StAX的一个特性就是简化编程,即“窥探”下一个事件而不消费它。这使程序员可以把控制转到大多数合适的方法中去等待事件。而使用SAX编程方法,就不得不在获得事件后马上处理。StAX有如此多优点以至于人们希望在下一版Java中包含一个实现了StAX的工具集,而现在它已经是Sun's Web Services Developer Pack的一部分了。
相关推荐
-
内存数据网格提供商一头扎进Java
10年的时间里,应用性能解决方案提供商Alachisoft一直在用NCache(针对N-Tier和网格计算.NET应用的内存计算和数据网格产品)为.NET社区服务。
-
遇到这样一个问题:通过java service wrapper部署应用,wrapper进程占用的内存会一直升高, 直到把内存吃完应用崩溃,但是这个wrapper
遇到这样一个问题:通过java service wrapper部署应用,wrapper进程占用的内存会一直升高 […]
-
Google App Engine for Java 对于目前中国需要学习吗?
-
前无古人后无来者的Java平台
开发人员一直在致力于保持Java的活力,经过20年后,我们感觉从来没有更好的、更令人激动的时刻如同Java社区一样。