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

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

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

    小菜毛毛技術分享

    與大家共同成長

      BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
      164 Posts :: 141 Stories :: 94 Comments :: 0 Trackbacks
    當你需要處理XML文檔時,你的首要選擇是使用DOM(文檔對象模型)還是使用SAX(用于XML的簡單API),即當前使用的兩個主要的XML API。你可以使用任何一種(或者在同一時間使用兩種)來處理XML文檔,然而DOM將文檔載入到內(nèi)存中處理,而SAX則相反,它可以檢測一個即將到來的 XML流,由此并不需要所有的XML代碼同時載入到內(nèi)存中。
    選擇DOM與SAX,與在一個數(shù)據(jù)庫中的表單與視圖之前選擇一樣:選擇適合于當前實際情況的方法。如果你只是想簡單地查看XML文檔而不處理它,那么請選擇使用SAX。


    SAX與DOM之間有一些顯著區(qū)別,包括:
             DOM是復雜對象處理的首選,比如當XML比較復雜的時候,或者當你需要隨機處理文檔中數(shù)據(jù)的時候。SAX從文檔的開始通過每一節(jié)點移動,以定位一個特定的節(jié)點。
    DOM 為載入到內(nèi)存的文檔節(jié)點建立類型描述。最終,這些描述呈現(xiàn)了可容易橫向移動、潛在巨大、樹型結(jié)構(gòu)。如果XML很冗長,DOM就會顯示出無法控制的脹大。例 如,一個300KB的XML文檔可以導致RAM或者虛擬內(nèi)存中的3,000,000KB的DOM樹型結(jié)構(gòu)。通過比較就會發(fā)現(xiàn),一個SAX文檔根本就沒有被 解構(gòu),它也沒有隱藏在內(nèi)存空間中(當然當XML流被讀入時,會有部分文檔暫時隱藏在內(nèi)存中)。SAX就是一種“更輕巧的”技術──它可以給你的系統(tǒng)帶來更 輕的負擔。SAX相當于觀看一場馬拉松比賽,而DOM就好比邀請所有的比賽選手到家里參加晚餐。
    所以,你如何選擇SAX和DOM?如果你處理復雜的東西,比如高級XSLT轉(zhuǎn)換,或者Xpath過濾,請選擇使用DOM。如果你建立或者更改XML文檔,你也可以選擇DOM。
    相反,你可以使用SAX來查詢或者閱讀XML文檔。SAX可以快速掃描一個大型的XML文檔,當它找到查詢標準時就會立即停止,然后再處理之。
    在某些情況下,在一個方案中,最佳的選擇是使用DOM和SAX處理不同的部分。例如,你可以使用DOM將XML載入到內(nèi)存并改變它,然后通過從DOM樹中發(fā)送一個SAX流而轉(zhuǎn)移最后的結(jié)果。


    SAX概念

       SAX是Simple API for XML的縮寫,它并不是由W3C官方所提出的標準,可以說是“民間”的事實標準。實際上,它是一種社區(qū)性質(zhì)的討論產(chǎn)物。雖然如此,在XML中對SAX的應用絲毫不比DOM少,幾乎所有的XML解析器都會支持它。

    與DOM比較而言,SAX是一種輕量型的方法。我們知道,在處理DOM的時候,我們需要讀入整個的XML文檔,然后在內(nèi)存中創(chuàng)建DOM樹,生成 DOM樹上的每個Node對象。當文檔比較小的時候,這不會造成什么問題,但是一旦文檔大起來,處理DOM就會變得相當費時費力。特別是其對于內(nèi)存的需 求,也將是成倍的增長,以至于在某些應用中使用DOM是一件很不劃算的事(比如在applet中)。這時候,一個較好的替代解決方法就是SAX。

       SAX在概念上與DOM完全不同。首先,不同于DOM的文檔驅(qū)動,它是事件驅(qū)動的,也就是說,它并不需要讀入整個文檔,而文檔的讀入過程也就 是SAX的解析過程。所謂事件驅(qū)動,是指一種基于回調(diào)(callback)機制的程序運行方法。(如果你對Java新的代理事件模型比較清楚的話,就會很 容易理解這種機制了)

       在XMLReader接受XML文檔,在讀入XML文檔的過程中就進行解析,也就是說讀入文檔的過程和解析的過程是同時進行的,這和DOM區(qū) 別很大。解析開始之前,需要向XMLReader注冊一個ContentHandler,也就是相當于一個事件監(jiān)聽器,在ContentHandler中 定義了很多方法,比如startDocument(),它定制了當在解析過程中,遇到文檔開始時應該處理的事情。當XMLReader讀到合適的內(nèi)容,就 會拋出相應的事件,并把這個事件的處理權代理給ContentHandler,調(diào)用其相應的方法進行響應

    posted on 2010-03-17 15:42 小菜毛毛 閱讀(319) 評論(0)  編輯  收藏 所屬分類: XML

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


    網(wǎng)站導航:
     
    主站蜘蛛池模板: 亚洲不卡无码av中文字幕| 亚洲国产综合精品中文字幕| 亚洲黄色片在线观看| 免费福利在线视频| 久久91亚洲人成电影网站| 免费无码av片在线观看| 亚洲欧洲自拍拍偷午夜色无码| 中国毛片免费观看| 久久被窝电影亚洲爽爽爽| 日韩免费电影网址| 亚洲天堂电影在线观看| 91视频国产免费| 亚洲s码欧洲m码吹潮| 无码国产亚洲日韩国精品视频一区二区三区 | 中文字幕无码亚洲欧洲日韩| 成人免费一级毛片在线播放视频| 亚洲国产午夜电影在线入口| 无码一区二区三区AV免费| 亚洲日韩一区精品射精| 亚洲国产av无码精品| 亚洲免费观看在线视频| 亚洲精品第五页中文字幕| 久久久www成人免费毛片| 色婷婷亚洲一区二区三区| 国产亚洲精品精品国产亚洲综合| 中文字幕在线免费看| 亚洲毛片基地日韩毛片基地| 日韩免费视频播播| 久久www免费人成精品香蕉| 亚洲视频在线观看| 在线免费视频一区二区| a级毛片免费网站| 亚洲国语精品自产拍在线观看| AA免费观看的1000部电影| 久香草视频在线观看免费 | 亚洲综合伊人制服丝袜美腿| 国产成人在线免费观看| 国产成人无码区免费网站| 亚洲最大中文字幕无码网站| 国产成人亚洲精品影院| 亚洲一区二区免费视频|