網上可以查到不少的4種解析方式的區別,我再作一下摘錄和總結,順帶給本身作個備份。java
SAX編程
sax分析器在對xml文檔進行分析時,觸發一系列的事件,應用程序經過事件處理函數實現對xml文檔的訪問.api
由於事件觸發是有時序性的,因此sax分析器提供的是一種對xml文檔的順序訪問機制,對於已經分析過的部分,dom
不能再從新倒回去處理.此外,它也不能同時訪問處理2個tag.函數
sax分析器在實現時,只是順序地檢查xml文檔中的字節流,判斷當前字節是xml語法中的哪一部分,檢查是否符合性能
xml語法而且觸發相應的事件.對於事件處理函數的自己,要由應用程序本身來實現. SAX解析器採用了基於事件的模型,它在解析XML文檔的時候能夠觸發一系列的事件,當發現給定的tag的時候,它能夠激活一個回調方法,告訴該方法制定的標籤已經找到。spa
同DOM分析器相比,sax分析器對xml文檔的處理缺少靈活性,但對於只訪問xml文檔中的數據而不改變應用程序orm
來講,sax分析器的效率會很高.xml
sax對內存要求也比較低.對象
優勢:一、無需將整個文檔加載到內存中,因此內存消耗少.
2 、推模型容許註冊多個contentHandler.
缺點:一、沒有內置的文檔導航支持.
二、不能隨機訪問xml文檔.
三、不支持原地修改xml.
四、不支持名字空間做用域.
適合:對xml文檔讀取數據
DOM
DOM解析器把XML文檔轉化爲一個包含其內容的樹,並能夠對樹進行遍歷。也就是說,經過DOM樹,應用程序能夠對XML文檔進行隨機訪問。這種訪問方式給應用程序的開發帶來了很大的靈活性,它能夠任意地控制整個XML文檔中的內容.用DOM解析模型編程容易,開發人員只須要調用建樹的指令,而後利用navigation APIs訪問所需的樹節點來完成任務。能夠很容易的添加和修改樹中的元素。然而因爲使用DOM解析器的時候須要處理整個XML文檔,因此對性能和內存的要求比較高,尤爲是遇到很大的XML文件的時候。因爲它的遍歷能力,DOM解析器經常使用於XML文檔須要頻繁的改變的服務中。
優勢:一、豐富的API集合,能夠輕鬆導航.
二、 整個DOM樹加載到內存,容許隨機訪問.
缺點:一、整個xml文檔必須一次解析完.
二、整個DOM樹都加載到內存中,內存要求高.
三、通常的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許可證變體下發布的開放源碼。
優勢:一、是基於樹的處理xml的java api,把樹加載到內存中.
二、沒有向下兼容的限制,因此比DOM簡單.
三、速度快.
四、具備SAX的java 規則.
缺點:一、不能處理大於內存的文檔.
二、JDOM表示XML文檔邏輯模型,不能保證每一個字節真正變換.
三、 針對實例文檔不提供DTD與模式的任何實際模型.
四、 不支持於DOM中相應遍歷包.
適用:自行選擇
DOM4J
DOM4J有更復雜的api,因此dom4j比jdom有更大的靈活性.DOM4J性能最好,連Sun的JAXM也在用DOM4J.目前許多開源項目中大量採用DOM4J,例如大名鼎鼎的Hibernate也用DOM4J來讀取XML配置文件。若是不考慮可移植性,那就採用DOM4J.
優勢:一、靈活性最高
二、易用性和功能強大、性能優異
缺點:一、複雜的api
二、移植性差
適用:自行選擇