XML解析技術的特性比較與選擇

根據上一篇文章中對四種XML解析技術的介紹和分析,對其特性進行總結和比較,如下表所示:

 

 

 

                     表1 XML解析技術特性比較

一. XML解析技術的選取

    這些解析技術具有各自的優缺點,在應用中,如何選擇正確的解析技術,往往成爲提高應用系統整體性能和效率的關鍵。

 

一) 面向文檔與面向應用的解析方式的選取

適合面向應用(主要有JAXB)的場合:

如果應用程序只是將XML文檔作爲數據交換的媒介,關心文檔中包含的數據勝於關心文檔的XML結構,那麼選擇面向應用的解析方式將能夠在數據獲取上得到很大的簡化,雖然在效率上有點損失,但相對於整個應用系統的模塊化設計是值得的。

 

適合面向文檔的場合:

如果應用程序真正關心文檔結構的細節,如編寫一個XML文檔編輯器,又或應用程序正在處理的XML文檔不遵守固定的結構,那麼選擇面向文檔的解析方式不僅能夠提高效率,還可以降低編程的複雜性。

 

二) 面向文檔的解析方式的選取

面向文檔的解析方式,包括流式解析(SAX,StAX),對象式解析(DOM,JDOM,DOM4J),指針式解析(VTD-XML

 

1)流式解析(SAX,StAX

如果應用程序僅僅想高效率的獲得XML文檔中的某部分數據,並且希望對解析過程進行更多的控制,而不需要對文檔進行添加和修改,那麼選取流式解析更能滿足需求。在流式解析中,StAX技術使得應用程序能夠更方便的控制解析過程,並且其作爲Java的官方規範,得到了更廣泛的應用。

2)對象式解析(DOM,JDOM,DOM4J

如果應用程序需要頻繁的對XML文檔中的數據進行檢索和修改,而對內存和效率沒有過多要求,那麼對象式解析將是一種很好的選擇。

 

原因:

對象式解析作爲一種高級的解析方式,它的重點在於對文檔結構進行建模,而完全不關心文檔的解析過程(對象式解析往往建立在流式解析的基礎上,在流式解析的過程中逐步建立模型)。而一旦在內存中建立了文檔的樹形結構模型,那麼就可以方便的通過模型對文檔進行搜索,修改、添加和刪除等操作,並且更適合於面向對象的編程。然而,這種便利性是以內存和效率爲代價的。

3)指針式解析(VTD-XML

當應用程序不關心解析過程,而對性能有較高要求時,可以選擇使用指針式解析。

 

原因:

指針式解析的提出是以提高效率,減少內存消耗爲主要目的,可看作是介於流式解析和對象式解析之間的一種解析方式。它巧妙的設計方式使得不需要對文檔建立樹形模型,就可以實現搜索,修改、添加和刪除等操作,同時嚮應用程序屏蔽了底層的解析過程,編程更加簡便。

 

二. 面向文檔解析方式的性能比較

根據VTD-XML的官方網站的數據[11]VTD-XML的解析速度是DOM5x-10x,是SAXwith 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性能比較

三、小結

隨着XML的廣泛應用,XML解析技術作爲XML文檔處理過程中關鍵的一環,對應用系統的整體性能有着重要影響。本文通過分析和比較4種主流XML解析技術的優缺點,使得開發人員能夠針對具體的應用需求選擇最爲合適的解析技術。此外,對XML解析技術的深入研究對於促進XML的應用也有着積極的作用。

 

摘自: http://java.chinaitlab.com/XMLBeans/789848.html

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章