軟件是對質(zhì)量的不懈追求

          SAX與DOM之間的區(qū)別

          SAX (Simple API for XML) DOM (Document Object Model) 是當前兩個主要的XML API,幾乎所有商用的xml 解析器都同時實現(xiàn)了這兩個接口。因此如果你的程序使用了SAX或者DOM APIs,那么你的程序?qū)?/span>xml解析器是透明。
           
          1. DOM以一個分層的對象模型來映射xml文檔。而SAX將文檔中的元素轉(zhuǎn)化為對象來處理。
           
          2. DOM將文檔載入到內(nèi)存中處理,而SAX則相反,它可以檢測一個即將到來的 XML流,由此并不需要所有的XML代碼同時載入到內(nèi)存中。
           
          SAX 處理是如何工作的

             SAX 
          在讀取 XML 流的同時處理它們,這很像以前的自動收報機紙帶(ticker tape)。請考慮下面的 XML 代碼片斷:
                 <?xml version="1.0"?>
                 <samples>
                    <server>UNIX</server>
                    <monitor>color</monitor>
                 </samples>

             分析這個代碼片斷的 SAX 處理器一般情況下將產(chǎn)生以下事件: 
                 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 允許開發(fā)人員捕捉這些事件并對它們作出反應。
           
          SAX 處理涉及以下步驟:

               1.
          創(chuàng)建一個事件處理程序。 
               2.
          創(chuàng)建 SAX 解析器。 
               3.
          向解析器分配事件處理程序。 
               4.
          解析文檔,同時向事件處理程序發(fā)送每個事件。 

          基于事件的處理的優(yōu)點和缺點

               
          這種處理的優(yōu)點非常類似于流媒體的優(yōu)點。分析能夠立即開始,而不是等待所有的數(shù)據(jù)被處理。而且,由于應用程序只是在讀取數(shù)據(jù)時檢查數(shù)據(jù),
             因此不需 要將數(shù)據(jù)存儲在內(nèi)存中。這對于大型文檔來說是個巨大的優(yōu)點。事實上,應用程序甚至不必解析整個文檔;它可以在某個條件得到滿足時
             停止解析。一般來說,SAX 還比它的替代者 DOM 快許多。
             另一方面,由于應用程序沒有以任何方式存儲數(shù)據(jù),使用 SAX 來更改數(shù)據(jù)或在數(shù)據(jù)流中往后移是不可能的。
           
          DOM 和基于樹的處理
               DOM 是處理 XML 數(shù)據(jù)的傳統(tǒng)方法。使用 DOM 時,數(shù)據(jù)以樹狀結(jié)構(gòu)的形式被加載到內(nèi)存中。
               
          例如,在“SAX 處理是如何工作的”中用作例子的相同文檔在 DOM 中將表示為節(jié)點,DOM 使用父子關系。
          基于樹的處理的優(yōu)點和缺點

              DOM 
          以及廣義的基于樹的處理具有幾個優(yōu)點。首先,由于樹在內(nèi)存中是持久的,因此可以修改它以便應用程序能對數(shù)據(jù)和結(jié)構(gòu)作出更改。
                 它還可以在任何時候在樹中上下導航,而不是像 SAX 那樣是一次性的處理。DOM 使用起來也要簡單得多。
              另一方面,在內(nèi)存中構(gòu)造這樣的樹涉及大量的開銷。大型文件完全占用系統(tǒng)內(nèi)存容量的情況并不鮮見。此外,創(chuàng)建一棵 DOM 樹可能是一個緩慢的過程。

          如何在 SAX  DOM 之間選擇

            
          選擇 DOM 還是選擇 SAX,這取決于下面幾個因素:

              1.
          應用程序的目的:如果打算對數(shù)據(jù)作出更改并將它輸出為 XML,那么在大多數(shù)情況下,DOM 是適當?shù)倪x擇。并不是說使用 SAX 就不能更改數(shù)據(jù),
                但是該過程要復雜得多,因為您必須對數(shù)據(jù)的一份拷貝而不是對數(shù)據(jù)本身作出更改。 

              2.
          數(shù)據(jù)容量: 對于大型文件,SAX 是更好的選擇。 
                數(shù)據(jù)將如何使用:如果只有數(shù)據(jù)中的少量部分會被使用,那么使用 SAX 來將該部分數(shù)據(jù)提取到應用程序中可能更好。 另一方面,
                如果您知道自己以后會回頭引用已處理過的大量信息,那么 SAX 也許不是恰當?shù)倪x擇。 

              3.
          對速度的需要: SAX 實現(xiàn)通常要比 DOM 實現(xiàn)更快。 

             SAX 
           DOM 不是相互排斥的,記住這點很重要。您可以使用 DOM 來創(chuàng)建 SAX 事件流,也可以使用 SAX 來創(chuàng)建 DOM 樹。事實上,用于創(chuàng)建 DOM 樹的大多數(shù)解析器實際上都使用 SAX 來完成這個任務!

          posted on 2009-11-14 13:33 BlakeSu 閱讀(435) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導航:
           
          主站蜘蛛池模板: 贡山| 鲁甸县| 浙江省| 安远县| 张北县| 永城市| 祁连县| 阜城县| 南乐县| 旌德县| 吉水县| 霞浦县| 余江县| 四子王旗| 聊城市| 绩溪县| 松阳县| 长治县| 宽甸| 黔江区| 黑山县| 梓潼县| 长春市| 沅陵县| 东光县| 荥阳市| 务川| 牡丹江市| 蓬安县| 新巴尔虎右旗| 潞城市| 兴化市| 十堰市| 兴宁市| 石阡县| 若尔盖县| 东台市| 商河县| 高邮市| 海城市| 沿河|