JAVA讀XML:sax,dom,jdom,dom4j的比較以及選擇(轉)

JAVA讀XML:sax,dom,jdom,dom4j的比較以及選擇(轉)

原文:www.hicourt.gov.cn/homepage/show9_content.asp


SAX:                                                                                                                         

SAX分析器在對XML文檔進行分析時,觸發一系列的事件,應用程序通過事件處理函數實現對XML文檔的訪問。由於事件觸發本身是有時序性的,因此,SAX分析器提供的是一種對XML文檔的順序訪問機制,對於已經分析過的部分,不能再倒回去重新處理。
    SAX之所以被叫做"簡單"應用程序接口,是因爲SAX分析器只做了一些簡單的工作,大部分工作還要由應用程序自己去做。也就是說,SAX分析器在實現時,它只是順序地檢查XML文檔中的字節流,判斷當前字節是XML語法中的哪一部分,檢查是否符合XML語法並觸發相應的事件。對於事件處理函數本身,要由應用程序自己來實現。同DOM分析器相比,SAX分析器對XML文檔的處理缺乏一定的靈活性,然而,對於那些只需要訪問XML文檔中的數據而不對文檔進行更改的應用程序來說,SAX分析器的效率則更高。由於SAX分析器實現簡單,對內存要求比較低,因此實現效率比較高同時具有廣泛的應用價值。

DOM:

DOM分析器通過對XML文檔的分析,把整個XML文檔以一棵DOM樹的形式存放在內存中,應用程序可以隨時對DOM樹中的任何一個部分進行訪問與操作,也就是說,通過DOM樹,應用程序可以對XML文檔進行隨機訪問。這種訪問方式給應用程序的開發帶來了很大的靈活性,它可以任意地控制整個XML文檔中的內容。然而,由於DOM分析器把整個XML文檔轉化成DOM樹放在了內存中,因此,當XML文檔比較大或者文檔結構比較複雜時,對內存的需求就比較高。而且,對於結構複雜的樹的遍歷也是一項比較耗時的操作。所以,DOM分析器對機器性能的要求比較高,實現效率不十分理想。不過,由於DOM分析器的樹結構的思想與XML文檔的結構相吻合,而且,通過DOM樹機制很容實現隨機訪問。因此DOM分析器也有較爲廣泛的使用價值。

JDOM:

JDOM是處理XML的純JAVA API。使用具體類而不用接口,既要生成大多數節點類型的實例,只要將一兩個變元傳入即可。是目前表現優秀的處理XML的JAVA API。

SAX
優點:①無需將整個文檔加載到內存,因而內存消耗少
        ②推模型允許註冊多個ContentHandler
缺點:①沒有內置的文檔導航支持
         ②不能夠隨機訪問XML文檔
         ③不支持在原地修改XML
         ④不支持名字空間作用域
最適合於:只從XML讀取數據的應用程(不可用於操作或修改XML文檔)

DOM
優點:①易於使用
         ②豐富的API集合,可用於輕鬆地導航
         ③整棵樹加載到內存,允許對XML文檔進行隨機訪問
缺點:①整個XML文檔必須一次解析完
         ②將整棵樹加載到內存成本較高
         ③一般的DOM節點對於必須爲所有節點創建對象的對象類型綁定不太理想
最適合於:需要修改XML文檔的應用程序或XSLT應用程序(不可用於只讀XML的應用程序)

JDOM
優點:①是基於樹的處理XML的Java API,把樹加載在內存中
        ②沒有向下兼容的限制,因此比DOM簡單
         ③速度快,缺陷少
         ④具有SAX的JAVA規則
缺點:①不能處理大於內存的文檔
         ②JDOM表示XML文檔邏輯模型。不能保證每個字節真正變換。
         ③針對實例文檔不提供DTD與模式的任何實際模型。
         ④不支持與DOM中相應遍歷包
最適合於:JDOM具有樹的便利,也有SAX的JAVA規則。在需要平衡時使用


DOM4J

雖然 DOM4J 代表了完全獨立的開發結果,但最初,它是 JDOM 的一種智能分支。它合併了許多超出基本 XML 文檔表示的功能,包括集成的 XPath 支持、XML Schema 支持以及用於大文檔或流化文檔的基於事件的處理。它還提供了構建文檔表示的選項,它通過 DOM4J API 和標準 DOM 接口具有並行訪問功能。從 2000 下半年開始,它就一直處於開發之中。

爲支持所有這些功能,DOM4J 使用接口和抽象基本類方法。DOM4J 大量使用了 API 中的 Collections 類,但是在許多情況下,它還提供一些替代方法以允許更好的性能或更直接的編碼方法。直接好處是,雖然 DOM4J 付出了更復雜的 API 的代價,但是它提供了比 JDOM 大得多的靈活性。

在添加靈活性、XPath 集成和對大文檔處理的目標時,DOM4J 的目標與 JDOM 是一樣的:針對 Java 開發者的易用性和直觀操作。它還致力於成爲比 JDOM 更完整的解決方案,實現在本質上處理所有 Java/XML 問題的目標。在完成該目標時,它比 JDOM 更少強調防止不正確的應用程序行爲。

DOM4J 是一個非常非常優秀的Java XML API,具有性能優異、功能強大和極端易用使用的特點,同時它也是一個開放源代碼的軟件。如今你可以看到越來越多的 Java 軟件都在使用 DOM4J 來讀寫 XML,特別值得一提的是連 Sun 的 JAXM 也在用 DOM4J。

 

總述

JDOM 和 DOM 在性能測試時表現不佳,在測試 10M 文檔時內存溢出。在小文檔情況下還值得考慮使用 DOM 和 JDOM。雖然 JDOM 的開發者已經說明他們期望在正式發行版前專注性能問題,但是從性能觀點來看,它確實沒有值得推薦之處。另外,DOM 仍是一個非常好的選擇。DOM 實現廣泛應用於多種編程語言。它還是許多其它與 XML 相關的標準的基礎,因爲它正式獲得 W3C 推薦(與基於非標準的 Java 模型相對),所以在某些類型的項目中可能也需要它(如在 javascript 中使用 DOM)。

SAX表現較好,這要依賴於它特定的解析方式。一個 SAX 檢測即將到來的XML流,但並沒有載入到內存(當然當XML流被讀入時,會有部分文檔暫時隱藏在內存中)。

無疑,DOM4J是最好的,目前許多開源項目中大量採用 DOM4J,例如大名鼎鼎的 Hibernate 也用 DOM4J 來讀取 XML 配置文件。如果不考慮可移植性,那就採用DOM4J吧!

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