SAX 與 DOM 的區別

2021-06-12 04:39:26 字數 2834 閱讀 5008

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

和dom (document object model) 

是當前兩個主要的

xml api

,幾乎所有商用的

xml 

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

sax或者

dom apis

,那麼你的程式對

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)

sax api 

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

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之間的區別

傳統的處理xml的api有dom和sax兩種,dom速度慢,占用記憶體極大。sax雖然比dom快,但速度任不理想。現在,一種新的基於流的stream api for xml 簡稱stax 極大地提高了xml的處理速度,並且已經稱為jsr 173標準 目前,stax最好的開源實現是woodstox 它...

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是基於記憶體的,不管檔案有多大,都會將所有的內容預先裝載到記憶體中。從而消耗很大的記憶體空間。...