2.6 四種XML解析技術(shù)的特性比較
根據(jù)以上對(duì)四種XML解析技術(shù)的介紹和分析,對(duì)其特性進(jìn)行總結(jié)和比較,如下表所示:
表1 XML解析技術(shù)特性比較
3 XML解析技術(shù)的選取
通過上述對(duì)四種XML解析技術(shù)的分析,可以大致看出XML解析技術(shù)的發(fā)展歷程,在不同的時(shí)期,針對(duì)不同的應(yīng)用需求,產(chǎn)生了不同的解析技術(shù)。這些解析技術(shù)具有各自的優(yōu)缺點(diǎn),在應(yīng)用中,如何選擇正確的解析技術(shù),往往成為提高應(yīng)用系統(tǒng)整體性能和效率的關(guān)鍵。
3.1 面向文檔與面向應(yīng)用的解析方式的選取
上述的四種解析技術(shù)又可分為兩類:面向文檔的和面向應(yīng)用的。如果應(yīng)用程序只是將XML文檔作為數(shù)據(jù)交換的媒介,關(guān)心文檔中包含的數(shù)據(jù)勝于關(guān)心文檔的XML結(jié)構(gòu),那么選擇面向應(yīng)用的解析方式將能夠在數(shù)據(jù)獲取上得到很大的簡(jiǎn)化,雖然在效率上有點(diǎn)損失,但相對(duì)于整個(gè)應(yīng)用系統(tǒng)的模塊化設(shè)計(jì)是值得的。
相反,如果應(yīng)用程序真正關(guān)心文檔結(jié)構(gòu)的細(xì)節(jié),如編寫一個(gè)XML文檔編輯器,又或應(yīng)用程序正在處理的XML文檔不遵守固定的結(jié)構(gòu),那么選擇面向文檔的解析方式不僅能夠提高效率,還可以降低編程的復(fù)雜性。
3.2 面向文檔的解析方式的選取
在面向文檔的三種解析方式中,流式解析和對(duì)象式解析是出現(xiàn)較早的兩種解析方式,提供了不同層面上的解析抽象。
流式解析是一種低級(jí)的解析方式,它能夠提供比對(duì)象式解析更多的控制,并且效率更高。然而,由于流式解析沒有對(duì)文檔結(jié)構(gòu)進(jìn)行建模,使得很難對(duì)文檔進(jìn)行搜索、修改、添加和刪除等操作,而且也無法進(jìn)行隨機(jī)訪問。因此如果應(yīng)用程序僅僅想高效率的獲得XML文檔中的某部分?jǐn)?shù)據(jù),并且希望對(duì)解析過程進(jìn)行更多的控制,而不需要對(duì)文檔進(jìn)行添加和修改,那么選取流式解析更能滿足需求。在流式解析中,StAX技術(shù)使得應(yīng)用程序能夠更方便的控制解析過程,并且其作為Java的官方規(guī)范,得到了更廣泛的應(yīng)用。
對(duì)象式解析作為一種高級(jí)的解析方式,它的重點(diǎn)在于對(duì)文檔結(jié)構(gòu)進(jìn)行建模,而完全不關(guān)心文檔的解析過程(對(duì)象式解析往往建立在流式解析的基礎(chǔ)上,在流式解析的過程中逐步建立模型)。而一旦在內(nèi)存中建立了文檔的樹形結(jié)構(gòu)模型,那么就可以方便的通過模型對(duì)文檔進(jìn)行搜索,修改、添加和刪除等操作,并且更適合于面向?qū)ο蟮木幊獭H欢?,這種便利性是以內(nèi)存和效率為代價(jià)的,因此,如果應(yīng)用程序需要頻繁的對(duì)XML文檔中的數(shù)據(jù)進(jìn)行檢索和修改,而對(duì)內(nèi)存和效率沒有過多要求,那么對(duì)象式解析將是一種很好的選擇。
而指針式解析的提出是以提高效率,減少內(nèi)存消耗為主要目的,可看作是介于流式解析和對(duì)象式解析之間的一種解析方式。它巧妙的設(shè)計(jì)方式使得不需要對(duì)文檔建立樹形模型,就可以實(shí)現(xiàn)搜索,修改、添加和刪除等操作,同時(shí)向應(yīng)用程序屏蔽了底層的解析過程,編程更加簡(jiǎn)便。因此,當(dāng)應(yīng)用程序不關(guān)心解析過程,而對(duì)性能有較高要求時(shí),可以選擇使用指針式解析。
3.2.1 面向文檔解析方式的性能比較
根據(jù)VTD-XML的官方網(wǎng)站的數(shù)據(jù)[11],VTD-XML的解析速度是DOM的5x-10x,是SAX(with NULL content handler)的1.5x - 2.0x(With NULL content handler 意味著SAX解析中沒有插入任何額外的處理邏輯,也就是SAX的最高速度)。VTD-XML的內(nèi)存占用僅為原XML的1.3x-1.5x(其中1.0x部分是原XML),而DOM的內(nèi)存占用則是原XML的4x-8x,對(duì)于一些大型的XML文檔,使用DOM方式處理往往會(huì)出現(xiàn)內(nèi)存溢出的錯(cuò)誤。
以下是SAX,DOM和VTD-XML三種XML解析方式的性能測(cè)試結(jié)果[10],如下表所示:
表2 SAX,DOM和VTD-XML性能比較
4、結(jié)論
隨著XML的廣泛應(yīng)用,XML解析技術(shù)作為XML文檔處理過程中關(guān)鍵的一環(huán),對(duì)應(yīng)用系統(tǒng)的整體性能有著重要影響。本文通過分析和比較4種主流XML解析技術(shù)的優(yōu)缺點(diǎn),使得開發(fā)人員能夠針對(duì)具體的應(yīng)用需求選擇最為合適的解析技術(shù)。此外,對(duì)XML解析技術(shù)的深入研究對(duì)于促進(jìn)XML的應(yīng)用也有著積極的作用。
參考文獻(xiàn):
[1] Frank P.Coyle著,袁勤勇,莫青 等譯. XML、Web服務(wù)和數(shù)據(jù)革命[M]. 北京:清華大學(xué)出版社,2003
[2] 魚雷. VTD-XML解析技術(shù)研究[碩士學(xué)位論文]. 西安: 西安電子科技大學(xué), 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
|
|