SAX與DOM


在解析xml時(如瀏覽器解析html標簽),主要存在兩種方式:SAX模式和DOM模式

 

SAX (Simple API for XML)  DOM (Document Object Model) 是當前兩個主要的XML API,幾乎所有商用的xml 解析器都同時實現了這兩個接口。因此如果你的程序使用了SAX或者DOM APIs,那么你的程序對xml解析器是透明。

 

SAX DOM
依序讀入文件並產生相對應事件,可以處理任何大小的XML文件。 在內存中建立文件樹,不適於處理大型的XML文件。
只能對文件按順序剖析一遍,不支持對文件的隨意存取 可以隨意存取文件樹的任何部分,沒有次數限制
只能讀取XML文件內容,而不能修改 可以隨意修改文件樹,從而修改了XML文件
開發上比較復雜,需要自己來制作事件處理器 易於理解,易於開發
對工作人員更靈活,可以用SAX建立自己的XML對象模型 已經在DOM基礎之上建立了文件樹
 
基於事件的處理的優點和缺點

     
這種處理的優點非常類似於流媒體的優點。分析能夠立即開始,而不是等待所有的數據被處理。而且,由於應用程序只是在讀取數據時檢查數據,
   因此不需 要將數據存儲在內存中。這對於大型文檔來說是個巨大的優點。事實上,應用程序甚至不必解析整個文檔;它可以在某個條件得到滿足時
   停止解析。一般來說, SAX  還比它的替代者  DOM  快許多。
   另一方面,由於應用程序沒有以任何方式存儲數據,使用  SAX  來更改數據或在數據流中往后移是不可能的。
 
基於樹的處理的優點和缺點

    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 來完成這個任務!
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM