JAXP的替代品

日期: 2008-01-01 作者:William Brogden 来源: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特性。

在开发了若干年……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

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的一部分了。

相关推荐