SAX與DOM之間的區別

2021-06-07 10:12:13 字數 3947 閱讀 4608

傳統的處理xml的api有dom和sax兩種,dom速度慢,占用記憶體極大。sax雖然比dom快,但速度任不理想。現在,一種新的基於流的stream api for xml(簡稱stax)極大地提高了xml的處理速度,並且已經稱為jsr 173標準(目前,stax最好的開源實現是woodstox(它完整地支援staxapi。resin3.1也內建了stax的實現,但是並沒有支援所以的staxapi。xfire在classpath上如果找到了staxapi的定義,就會試圖定位乙個stax的實現。

簡說xml的解析方式(dom,sax,stax)

一般來說,解析xml檔案存在著兩種方式,一種是event-based api,比如說象

這裡,saxstax的另外一點區別是:sax只能讀xml檔案.stax不但能讀xml檔案,而且還能寫xml檔案.

sax(****** api for xml)

dom(document object model)

是當前兩個主要的

xml api

,幾乎所有商用的

xml

解析器都同時實現了這兩個介面。因此如果你的程式使用了

sax或者

domapis

,那麼你的程式對

xml解析器是透明。

1.dom

以乙個分層的物件模型來對映

xml文件。而

sax

將文件中的元素轉化為物件來處理。

2.dom

將文件載入到記憶體中處理,而

sax

則相反,它可以檢測乙個即將到來的

xml流,由此並不需要所有的

xml**同時載入到記憶體中。

sax處理是如何工作的

sax在讀取

xml

流的同時處理它們,這很像以前的自動收報機紙帶(

ticker tape

)。請考慮下面的

xml

**片斷:

<?xml version="1.0"?>

unix

color

分析這個**片斷的

sax處理器一般情況下將產生以下事件:

start document

start element (samples)

characters (white space)

start element (server)

characters (unix)

end element (server)

characters (white space)

start element (monitor)

characters (color)

end element (monitor)

characters (white space)

end element (samples)

saxapi

允許開發人員捕捉這些事件並對它們作出反應。

sax處理涉及以下步驟:

1.建立乙個事件處理程式。

2.建立

sax解析器。

3.向解析器分配事件處理程式。

4.解析文件,同時向事件處理程式傳送每個事件。

基於事件的處理的優點和缺點

這種處理的優點非常類似於流**的優點。分析能夠立即開始,而不是等待所有的資料被處理。而且,由於應用程式只是在讀取資料時檢查資料,因此不需要將資料儲存在記憶體中。這對於大型文件來說是個巨大的優點。事實上,應用程式甚至不必解析整個文件;它可以在某個條件得到滿足時停止解析。一般來說,

sax還比它的替代者

dom快許多。

另一方面,由於應用程式沒有以任何方式儲存資料,使用

sax來更改資料或在資料流中往後移是不可能的。

dom和基於樹的處理

dom是處理

xml

資料的傳統方法。使用

dom時,資料以樹狀結構的形式被載入到記憶體中。

例如,在「

sax處理是如何工作的」中用作例子的相同文件在

dom中將表示為節點,

dom使用父子關係。

基於樹的處理的優點和缺點

dom以及廣義的基於樹的處理具有幾個優點。首先,由於樹在記憶體中是持久的,因此可以修改它以便應用程式能對資料和結構作出更改。它還可以在任何時候在樹中上下導航,而不是像

sax那樣是一次性的處理。

dom使用起來也要簡單得多。

另一方面,在記憶體中構造這樣的樹涉及大量的開銷。大型檔案完全占用系統記憶體容量的情況並不鮮見。此外,建立一棵

dom樹可能是乙個緩慢的過程。

如何在

sax

dom之間選擇

選擇dom還是選擇

sax,這取決於下面幾個因素:

1.應用程式的目的:如果打算對資料作出更改並將它輸出為

xml,那麼在大多數情況下,

dom是適當的選擇。並不是說使用

sax就不能更改資料,但是該過程要複雜得多,因為您必須對資料的乙份拷貝而不是對資料本身作出更改。

2.資料容量:

對於大型檔案,

sax是更好的選擇。

資料將如何使用:如果只有資料中的少量部分會被使用,那麼使用

sax來將該部分資料提取到應用程式中可能更好。

另一方面,如果您知道自己以後會回頭引用已處理過的大量資訊,那麼

sax也許不是恰當的選擇。

3.對速度的需要:

sax實現通常要比

dom實現更快。

sax

dom不是相互排斥的,記住這點很重要。您可以使用

dom來建立

sax事件流,也可以使用

sax來建立

dom樹。事實上,用於建立

dom樹的大多數解析器實際上都使用

sax來完成這個任務!

SAX 與 DOM 的區別

sax api for xml 和dom document object model 是當前兩個主要的 xml api 幾乎所有商用的 xml 解析器都同時實現了這兩個介面。因此如果你的程式使用了 sax或者 dom apis 那麼你的程式對 xml解析器是透明。1.dom 以乙個分層的物件模型來對...

SAX與DOM解析XML的區別

解析xml有四種方法 dom,sax,dom4j,jdom.我們主要學了兩種 dom和sax.dom適於解析比較簡單的xml而sax則適於解析較複雜的xml檔案。各有各的好。dom和sax的不同 1.dom是基於記憶體的,不管檔案有多大,都會將所有的內容預先裝載到記憶體中。從而消耗很大的記憶體空間。...

SAX與DOM解析XML的區別

解析xml有四種方法 dom,sax,dom4j,jdom.我們主要學了兩種 dom和sax.dom適於解析比較簡單的xml而sax則適於解析較複雜的xml檔案。各有各的好。dom和sax的不同 1.dom是基於記憶體的,不管檔案有多大,都會將所有的內容預先裝載到記憶體中。從而消耗很大的記憶體空間。...