sax解析和dom解析的區別

SAX:只能讀,不能修改,只能順序訪問,適合對大型的XML的解析,解析速度快!
DOM:不僅能讀,還能修改,而且能夠實現隨機訪問,缺點是解析速度慢,只適合解析小型文檔
解析速度慢(要在內存中生成節點樹,而生成樹是比較費時的)
SAX:應用於保存大量數據的XML(爲什麼要用XML保存大量的數據類容?答:可以實現異構系統
的數據訪問,實現跨平臺!)

DOM:一般應用與小型的配置XML,方便我們操作!



SAX是Simple API for XML的縮寫,它並不是由W3C官方所提出的標準,可以說是“民間”的事實標準。實際上,它是一種社區性質的討論產物。雖然如此,在XML中對SAX的應用絲毫不比DOM少,幾乎所有的XML解析器都會支持它。

與DOM 比較而言,SAX是一種輕量型的方法。我們知道,在處理DOM的時候,我們需要讀入整個的XML文檔,然後在內存中創建DOM樹,生成DOM樹上的每個 Node對象。當文檔比較小的時候,這不會造成什麼問題,但是一旦文檔大起來,處理DOM就會變得相當費時費力。特別是其對於內存的需求,也將是成倍的增長,以至於在某些應用中使用DOM是一件很不划算的事(比如在applet中)。這時候,一個較好的替代解決方法就是SAX。

SAX 在概念上與DOM完全不同。首先,不同於DOM的文檔驅動,它是事件驅動的,也就是說,它並不需要讀入整個文檔,而文檔的讀入過程也就是SAX的解析過程。所謂事件驅動,是指一種基於回調(callback)機制的程序運行方法。(如果你對Java新的代理事件模型比較清楚的話,就會很容易理解這種機制了)

在XMLReader接受XML文檔,在讀入XML文檔的過程中就進行解析,也就是說讀入文檔的過程和解析的過程是同時進行的,這和DOM區別很大。解析開始之前,需要向XMLReader註冊一個ContentHandler,也就是相當於一個事件監聽器,在 ContentHandler中定義了很多方法,比如startDocument(),它定製了當在解析過程中,遇到文檔開始時應該處理的事情。當 XMLReader讀到合適的內容,就會拋出相應的事件,並把這個事件的處理權代理給ContentHandler,調用其相應的方法進行響應。


DOM 簡介: 
DOM 對於 XML 的處理方式就是把整個 XML 讀到內存中形成一棵樹狀結構,然後用各種方法對這棵數進行遍歷、插入、刪除、修剪等操作。因爲 DOM 是 W3C 的正式標準,所有的語言都有支持 DOM 的解析器,包括 Java、C/C++、Perl、JavaScript 等等。DOM 的優點是信息量豐富(全部都在內存中),而且可以隨機訪問,尤其是在處理前後相互關聯的元素時非常方便。DOM 的缺點是 XML 應用程序在處理 XML 之前必須先由 XML 解析器把整個 XML 讀進內存並生成樹狀結構,如果 XML 非常大,例如 10M,解析的過程是非常慢的。如果再加上 XSLT 轉換(這是一種必須要使用 DOM 的操作)這類同樣耗費資源的操作,可能會耗盡系統的內存資源。所以標準 DOM 只適合於中小型 XML 的處理。 

SAX 簡介: 
爲了更好地解決大型 XML 處理的問題,Java 開發人員發明了 SAX。SAX 採用事件驅動的方式來處理 XML,它的處理方式是:爲每一個元素、屬性、內容(這些都認爲是事件)定義一個回調方法,這個回調方法由應用程序提供。解析器以數據流的方式讀入 XML,當遇到某個元素、屬性、內容時就調用相應的回調方法。SAX 的優點是處理效率高,適合處理大型 XML。缺點是 SAX 對 XML 是隻讀的,不能夠對 XML 進行寫操作,而且 SAX 處理 XML 中前後相互關聯的元素時也沒有 DOM 方便,因爲應用程序必須自己保留以前事件的狀態信息。但是 SAX 還是取得了巨大的成功,後來 SAX 還被移植到了 C++ 等語言中。


DOM解析器把XML文檔轉化爲一個包含其內容的樹,並可以對樹進行遍歷。用DOM解析模型的優點是編程容易,開發人員只需要調用建樹的指令,然後利用 navigation APIs訪問所需的樹節點來完成任務。可以很容易的添加和修改樹中的元素。然而由於使用 DOM解析器的時候需要處理整個XML文檔,所以對性能和內存的要求比較高,尤其是遇到很大的XML文件的時候。由於它的遍歷能力,DOM解析器常用於 XML文檔需要頻繁的改變的服務中。
    SAX解析器採用了基於事件的模型,它在解析XML文檔的時候可以觸發一系列的事件,當發現給定的tag的時候,它可以激活一個回調方法,告訴該方法制定的標籤已經找到。SAX對內存的要求通常會比較低,因爲它讓開發人員自己來決定所要處理的 tag.特別是當開發人員只需要處理文檔中所包含的部分數據時,SAX這種擴展能力得到了更好的體現。但用SAX解析器的時候編碼工作會比較困難,而且很難同時訪問同一個文檔中的多處不同數據。
     選擇DOM還是選擇SAX? 對於需要自己編寫代碼來處理XML文檔的開發人員來說, 選擇DOM還是SAX 解析模型是一個非常重要的設計 決策。 DOM採用建立樹形結構的方式訪問XML文檔,而SAX採用的事件模型。
     SAX 處理的優點非常類似於流媒體的優點。分析能夠立即開始,而不是等待所有的數據被處理。而且,由於應用程序只是在讀取數據時檢查數據,因此不需要將數據存儲在內存中。這對於大型文檔來說是個巨大的優點。事實上,應用程序甚至不必解析整個文檔;它可以在某個條件得到滿足時停止解析。一般來說,SAX還比它的替代者DOM快許多。
      DOM是用與平臺和語言無關的方式表示XML文檔的官方W3C標準。DOM是以層次結構組織的節點或信息片斷的集合。這個層次結構允許開發人員在樹中尋找特定信息。分析該結構通常需要加載整個文檔和構造層次結構,然後才能做任何工作。由於 它是基於信息層次的,因而DOM被認爲是基於樹或基於對象的。 DOM 以及廣義的基於樹的處理具有幾個優點。首先,由於樹在內存中是持久的,因此可以 修改它以便應用程序能對數據和結構作出更改。它還可以在任何時候在樹中上下導航,而不是像SAX那樣是一次性的處理。DOM使用起來 也要簡單得多。



發佈了32 篇原創文章 · 獲贊 15 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章