随笔-128  评论-55  文章-5  trackbacks-0

2.6 四种XML解析技术的特性比较

根据以上对四种XML解析技术的介绍和分析,对其特性进行总结和比较,如下表所示:

1 XML解析技术特性比较


3  XML
解析技术的选取

通过上述对四种XML解析技术的分析,可以大致看出XML解析技术的发展历程,在不同的时期,针对不同的应用需求,产生了不同的解析技术。这些解析技术具有各自的优缺点,在应用中,如何选择正确的解析技术,往往成为提高应用系统整体性能和效率的关键。

3.1 面向文档与面向应用的解析方式的选取

上述的四种解析技术又可分为两类:面向文档的和面向应用的。如果应用程序只是将XML文档作为数据交换的媒介,关心文档中包含的数据胜于关心文档的XML结构,那么选择面向应用的解析方式将能够在数据获取上得到很大的简化,虽然在效率上有点损失,但相对于整个应用系统的模块化设计是值得的。

相反,如果应用程序真正关心文档结构的细节,如编写一个XML文档编辑器,又或应用程序正在处理的XML文档不遵守固定的结构,那么选择面向文档的解析方式不仅能够提高效率,还可以降低编程的复杂性。

3.2 面向文档的解析方式的选取

在面向文档的三种解析方式中,流式解析和对象式解析是出现较早的两种解析方式,提供了不同层面上的解析抽象。

流式解析是一种低级的解析方式,它能够提供比对象式解析更多的控制,并且效率更高。然而,由于流式解析没有对文档结构进行建模,使得很难对文档进行搜索、修改、添加和删除等操作,而且也无法进行随机访问。因此如果应用程序仅仅想高效率的获得XML文档中的某部分数据,并且希望对解析过程进行更多的控制,而不需要对文档进行添加和修改,那么选取流式解析更能满足需求。在流式解析中,StAX技术使得应用程序能够更方便的控制解析过程,并且其作为Java的官方规范,得到了更广泛的应用。

对象式解析作为一种高级的解析方式,它的重点在于对文档结构进行建模,而完全不关心文档的解析过程(对象式解析往往建立在流式解析的基础上,在流式解析的过程中逐步建立模型)。而一旦在内存中建立了文档的树形结构模型,那么就可以方便的通过模型对文档进行搜索,修改、添加和删除等操作,并且更适合于面向对象的编程。然而,这种便利性是以内存和效率为代价的,因此,如果应用程序需要频繁的对XML文档中的数据进行检索和修改,而对内存和效率没有过多要求,那么对象式解析将是一种很好的选择。

而指针式解析的提出是以提高效率,减少内存消耗为主要目的,可看作是介于流式解析和对象式解析之间的一种解析方式。它巧妙的设计方式使得不需要对文档建立树形模型,就可以实现搜索,修改、添加和删除等操作,同时向应用程序屏蔽了底层的解析过程,编程更加简便。因此,当应用程序不关心解析过程,而对性能有较高要求时,可以选择使用指针式解析。

3.2.1 面向文档解析方式的性能比较

根据VTD-XML的官方网站的数据[11]VTD-XML的解析速度是DOM5x-10x,是SAX(with NULL content handler)1.5x - 2.0xWith NULL content handler 意味着SAX解析中没有插入任何额外的处理逻辑,也就是SAX的最高速度)。VTD-XML的内存占用仅为原XML1.3x-1.5x(其中1.0x部分是原XML),而DOM的内存占用则是原XML4x-8x,对于一些大型的XML文档,使用DOM方式处理往往会出现内存溢出的错误。

以下是SAXDOMVTD-XML三种XML解析方式的性能测试结果[10],如下表所示:


2 SAXDOMVTD-XML性能比较

4、结论

随着XML的广泛应用,XML解析技术作为XML文档处理过程中关键的一环,对应用系统的整体性能有着重要影响。本文通过分析和比较4种主流XML解析技术的优缺点,使得开发人员能够针对具体的应用需求选择最为合适的解析技术。此外,对XML解析技术的深入研究对于促进XML的应用也有着积极的作用。


参考文献:

[1]     Frank P.Coyle著,袁勤勇,莫青 等译. XMLWeb服务和数据革命[M]. 北京:清华大学出版社,2003

[2]     鱼雷. VTD-XML解析技术研究[硕士学位论文]. 西安: 西安电子科技大学, 2007

[3]     Benoit Marchal. Working XML: Understand the various approaches to XML parsing [EB/OL]. http://www.ibm.com/developerworks/xml/library/x-wxxm38.html . 2007

[4]     Benoit Marchal.  SAX, the power API [EB/OL]. http://www.ibm.com/developerworks/library/x-saxapi/ index.html . 2001

[5]     Peter Nehrer. StAX'ing up XML, Part 1: An introduction to Streaming API for XML (StAX) [EB/OL]. http://www.ibm.com/developerworks/xml/library/x-stax1.html . 2006

[6]     Dennis Sosnoski. XML and Java technologies: Java document model usage [EB/OL]. http://www.ibm.com /developerworks/library/x-injava2/index.html. 2002

[7]     Dennis M. Sosnoski. XML Data Binding with Castor [EB/OL]. http://www.ibm.com/developerworks/cn/java /j-x-bindcastor /. 2002

[8]     Dennis Sosnoski. XML and Java technologies: Data binding [EB/OL]. http://www.ibm.com/developerworks /library/x-databdopt /index.html. 2003

[9]     Brett McLaughlin. Practical data binding: Get your feet wet in the real world [EB/OL]. http://www.ibm.com /developerworks/library/x-pracdb1.html. 2004

[10]  Jimmy Zhang. A Step in the Right Direction VTD-XML Improves XML Processing [EB/OL]. http://www.devx.com/xml/Article/30484. 2006

[11]  Project Homepage of VTD-XML. http://vtd-xml.sourceforge.net/



Author: orangelizq
email: orangelizq@163.com

欢迎大家访问我的个人网站 萌萌的IT人
posted on 2009-07-19 15:30 桔子汁 阅读(1742) 评论(0)  编辑  收藏 所属分类: Web Service

只有注册用户登录后才能发表评论。


网站导航: