科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道JAXP的替代品

JAXP的替代品

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本文中让我们介绍Java标准版中用于XML处理的类,即JAXP——Java API for XML Processing中两种新的替代品并解释为什么一些Java程序员更喜欢使用它们。

作者: William Brogden 来源:IT专家网 2008年4月20日

关键字: 替代品 JAXP java

  • 评论
  • 分享微博
  • 分享邮件
本文中让我们介绍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的一部分了。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章