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