sax/dom/jdom/dom4j的區別

網上能夠查到很多的4種解析方式的區別,我再做一下摘錄和總結,順帶給自己做個備份。


SAX

sax分析器在對xml文檔進行分析時,觸發一系列的事件,應用程序通過事件處理函數實現對xml文檔的訪問.

因爲事件觸發是有時序性的,所以sax分析器提供的是一種對xml文檔的順序訪問機制,對於已經分析過的部分,

不能再重新倒回去處理.此外,它也不能同時訪問處理2個tag.

sax分析器在實現時,只是順序地檢查xml文檔中的字節流,判斷當前字節是xml語法中的哪一部分,檢查是否符合

xml語法並且觸發相應的事件.對於事件處理函數的本身,要由應用程序自己來實現. SAX解析器採用了基於事件的模型,它在解析XML文檔的時候可以觸發一系列的事件,當發現給定的tag的時候,它可以激活一個回調方法,告訴該方法制定的標籤已經找到。

同DOM分析器相比,sax分析器對xml文檔的處理缺乏靈活性,但對於只訪問xml文檔中的數據而不改變應用程序

來說,sax分析器的效率會很高.

sax對內存要求也比較低.

 

優點:1、無需將整個文檔加載到內存中,所以內存消耗少.

       2 、推模型允許註冊多個contentHandler.

缺點:1、沒有內置的文檔導航支持.

       2、不能隨機訪問xml文檔.

       3、不支持原地修改xml.

       4、不支持名字空間作用域.

適合:對xml文檔讀取數據

 

DOM

DOM解析器把XML文檔轉化爲一個包含其內容的樹,並可以對樹進行遍歷。也就是說,通過DOM樹,應用程序可以對XML文檔進行隨機訪問。這種訪問方式給應用程序的開發帶來了很大的靈活性,它可以任意地控制整個XML文檔中的內容.用DOM解析模型編程容易,開發人員只需要調用建樹的指令,然後利用navigation APIs訪問所需的樹節點來完成任務。可以很容易的添加和修改樹中的元素。然而由於使用DOM解析器的時候需要處理整個XML文檔,所以對性能和內存的要求比較高,尤其是遇到很大的XML文件的時候。由於它的遍歷能力,DOM解析器常用於XML文檔需要頻繁的改變的服務中。

 

優點:1、豐富的API集合,可以輕鬆導航.

        2、 整個DOM樹加載到內存,允許隨機訪問.

缺點:1、整個xml文檔必須一次解析完.

        2、整個DOM樹都加載到內存中,內存要求高.

        3、一般的DOM節點對於必須爲所有節點創建對象的對象類型綁定不太理想.

適用:對xml文檔修改數據

 

JDOM

JDOM是處理xml的純java api.使用具體類而不是接口.JDOM具有樹的遍歷,又有SAX的java規則.JDOM與DOM主要有兩方面不同。首先,JDOM僅使用具體類而不使用接口。這在某些方面簡化了API,但是也限制了靈活性。第二,API大量使用了Collections類,簡化了那些已經熟悉這些類的Java開發者的使用。

JDOM自身不包含解析器。它通常使用SAX2解析器來解析和驗證輸入XML文檔(儘管它還可以將以前構造的DOM表示作爲輸入)。它包含一些轉換器以將JDOM表示輸出成SAX2事件流、DOM模型或XML文本文檔。JDOM是在Apache許可證變體下發布的開放源碼。

 

優點:1、是基於樹的處理xml的java api,把樹加載到內存中.

        2、沒有向下兼容的限制,所以比DOM簡單.

        3、速度快.

        4、具有SAX的java 規則.

缺點:1、不能處理大於內存的文檔.

        2、JDOM表示XML文檔邏輯模型,不能保證每個字節真正變換.

        3、 針對實例文檔不提供DTD與模式的任何實際模型.

        4、 不支持於DOM中相應遍歷包.

適用:自行選擇

 

DOM4J

DOM4J有更復雜的api,所以dom4j比jdom有更大的靈活性.DOM4J性能最好,連Sun的JAXM也在用DOM4J.目前許多開源項目中大量採用DOM4J,例如大名鼎鼎的Hibernate也用DOM4J來讀取XML配置文件。如果不考慮可移植性,那就採用DOM4J.

優點:1、靈活性最高

     2、易用性和功能強大、性能優異

缺點:1、複雜的api

     2、移植性差

適用:自行選擇

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