扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
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领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者