The NoteBook of EricKong

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            611 Posts :: 1 Stories :: 190 Comments :: 0 Trackbacks
          DOM 構建整個文檔駐留內存的樹。如果文檔很大,就會要求有極大的內存。
          DOM 創建表示原始文檔中每個東西的對象,包括元素、文本、屬性和空格。如果您只需關注原始文檔的一小部分,那么創建那些永遠不被使用的對象是極其浪費的。
          DOM 解析器必須在您的代碼取得控制權之前讀取整個文檔。對于非常大的文檔,這會引起顯著的延遲。
          SAX 解析器向您的代碼發送事件。當解析器發現元素開始、元素結束、文本、文檔的開始或結束等時,它會告訴您。您可以決定什么事件對您重要,而且可以決定要創建什么類型的數據結構以保存來自這些事件的數據。如果您沒有顯式地保存來自某個事件的數據,它就被丟棄。
          SAX 解析器根本不創建任何對象,它只是將事件傳遞給您的應用程序。如果希望基于那些事件創建對象,這將由您來完成。
          SAX 解析器在解析開始的時候就開始發送事件。當解析器發現文檔開始、元素開始和文本等時,代碼會收到一個事件。您的應用程序可以立即開始生成結果;您不必一直等到整個文檔被解析完畢。更妙的是,如果您只查找文檔中某些內容,代碼一旦找到所要找的東西就可以拋出一個異常。該異常會停止 SAX 解析器,然后代碼用它找到的數據做它需要做的任何事。
          SAX 事件是無狀態的。當 SAX 解析器在 XML 文檔中發現文本時,它就向您的代碼發送一個事件。該事件僅僅給您發現的文本;它不告訴您什么元素包含那個文本。如果您想知道這一點,則必須自己編寫狀態管理代碼。
          SAX 事件不是持久的。如果應用程序需要一個數據結構來對 XML 文檔建模,則必須自己編寫那樣的代碼。如果您需要從 SAX 事件訪問數據,并且沒有把那個數據存儲在代碼中,那么您不得不再次解析該文檔。
          SAX 不是由一個集中管理的組織控制的。盡管到目前為止這還沒有引起什么問題,但如果 SAX 是由象 W3C 這樣的一個組織控制的話,有些開發人員會感覺更自在。
          JDOM 的主要特性是它極大地減少了您必須編寫的代碼數量。JDOM 應用程序的長度通常是 DOM 應用程序的三分之一,大約是 SAX 應用程序的一半。
          JAXP為使用 DOM、SAX 和 XSLT 處理 XML 文檔提供公共接口

          綜述:SAX在對速度要求特別快,或機器內存不足的情況下使用;DOM在對解析速度要求不高,或xml文檔不是很大的情況下使用;對于頻繁修改xml文件內容的情況,建議用dom,因為sax每次都要從頭到尾遍歷節點,而且不易實現。雖然SAX表現較好,這要依賴于它特定的解析方式,一個 SAX 檢測即將到來的XML流,但并沒有載入到內存(當然當XML流被讀入時,會有部分文檔暫時隱藏在內存中)。
          posted on 2014-01-02 16:12 Eric_jiang 閱讀(324) 評論(0)  編輯  收藏 所屬分類: Java
          主站蜘蛛池模板: 锡林浩特市| 普洱| 静乐县| 嘉义市| 方正县| 仙居县| 南投市| 博白县| 五大连池市| 江都市| 外汇| 南雄市| 交口县| 阳东县| 长兴县| 河间市| 宜都市| 申扎县| 鄂尔多斯市| 台山市| 尼木县| 平塘县| 博湖县| 山西省| 沁源县| 奇台县| 嘉峪关市| 博野县| 广平县| 道真| 保德县| 柞水县| 绥江县| 海阳市| 瓦房店市| 清镇市| 商都县| 达州市| 张家口市| 临桂县| 青铜峡市|