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的解析速度是DOM的5x-10x,是SAX(with NULL content handler)的1.5x - 2.0x(With NULL content handler 意味着SAX解析中没有插入任何额外的处理逻辑,也就是SAX的最高速度)。VTD-XML的内存占用仅为原XML的1.3x-1.5x(其中1.0x部分是原XML),而DOM的内存占用则是原XML的4x-8x,对于一些大型的XML文档,使用DOM方式处理往往会出现内存溢出的错误。
以下是SAX,DOM和VTD-XML三种XML解析方式的性能测试结果[10],如下表所示:
表2 SAX,DOM和VTD-XML性能比较
4、结论
随着XML的广泛应用,XML解析技术作为XML文档处理过程中关键的一环,对应用系统的整体性能有着重要影响。本文通过分析和比较4种主流XML解析技术的优缺点,使得开发人员能够针对具体的应用需求选择最为合适的解析技术。此外,对XML解析技术的深入研究对于促进XML的应用也有着积极的作用。
参考文献:
[1] Frank P.Coyle著,袁勤勇,莫青 等译。 XML、Web服务和数据革命[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. StAXing 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