<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    軟件是對質(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é)構的形式被加載到內(nèi)存中。
         
    例如,在“SAX 處理是如何工作的”中用作例子的相同文檔在 DOM 中將表示為節(jié)點,DOM 使用父子關系。
    基于樹的處理的優(yōu)點和缺點

        DOM 
    以及廣義的基于樹的處理具有幾個優(yōu)點。首先,由于樹在內(nèi)存中是持久的,因此可以修改它以便應用程序能對數(shù)據(jù)和結(jié)構作出更改。
           它還可以在任何時候在樹中上下導航,而不是像 SAX 那樣是一次性的處理。DOM 使用起來也要簡單得多。
        另一方面,在內(nèi)存中構造這樣的樹涉及大量的開銷。大型文件完全占用系統(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 閱讀(433) 評論(0)  編輯  收藏


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


    網(wǎng)站導航:
     
    主站蜘蛛池模板: 亚洲AV无码乱码在线观看牲色| 亚洲日韩精品无码专区加勒比| 免费观看日本污污ww网站一区| 8090在线观看免费观看| 日本一区二区三区在线视频观看免费 | 一个人免费观看www视频| 久久精品国产亚洲av麻豆图片 | 国产成人亚洲综合在线| 国产精品亚洲精品观看不卡| 亚洲另类激情综合偷自拍| 国外亚洲成AV人片在线观看| 国产一区二区三区免费看| 成人毛片免费观看| 福利免费观看午夜体检区| 99精品在线免费观看| 9久热精品免费观看视频| 一区二区三区AV高清免费波多| 国产精品亚洲综合一区在线观看| 中文字幕亚洲综合小综合在线| 亚洲精品福利网泷泽萝拉| 亚洲AV无码国产在丝袜线观看| 亚洲男人的天堂www| 国产亚洲精品AA片在线观看不加载| 免费国产成人午夜私人影视| 日韩成人在线免费视频| 最近中文字幕mv手机免费高清| 国产成人A在线观看视频免费| 99在线视频免费观看视频| 日韩在线免费视频| 久久久久久99av无码免费网站| 国产高清不卡免费在线| 波多野结衣在线免费视频| 69式国产真人免费视频| 毛片免费视频播放| 免费看大美女大黄大色| 国产大片91精品免费观看男同| 亚洲av区一区二区三| 2048亚洲精品国产| 国产亚洲人成网站观看| 久久久久亚洲精品美女| 亚洲色偷偷av男人的天堂 |