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

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

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

    小菜毛毛技術(shù)分享

    與大家共同成長(zhǎng)

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


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


    SAX概念

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

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

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

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

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

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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 精品无码一区二区三区亚洲桃色| 丰满人妻一区二区三区免费视频| 亚洲国产成人片在线观看| 成人免费看黄20分钟| 99国产精品视频免费观看| 久久www免费人成看国产片| 亚洲国产成人精品无码区二本 | 亚洲精品免费观看| 亚洲精品成人a在线观看| 毛片免费观看网站| 亚洲香蕉免费有线视频| 一区二区在线免费观看| 国产在线观a免费观看| 免费夜色污私人影院网站电影 | 日韩中文字幕在线免费观看| av无码国产在线看免费网站 | 亚洲婷婷五月综合狠狠爱| 亚洲成人国产精品| 国产免费资源高清小视频在线观看| 毛片免费视频观看| 噼里啪啦免费观看高清动漫4| 16女性下面扒开无遮挡免费| 一级毛片不卡片免费观看| 你懂的在线免费观看| 99免费在线视频| 久久久受www免费人成| 羞羞视频免费网站在线看| caoporm超免费公开视频| 一区二区三区精品高清视频免费在线播放 | 亚洲1区2区3区精华液| 久久精品亚洲日本波多野结衣| 亚洲综合偷自成人网第页色| 亚洲精品综合在线影院| 亚洲成av人片在线看片| 亚洲国产亚洲片在线观看播放| 亚洲一区免费在线观看| 亚洲精品人成网在线播放影院| 亚洲www77777| 亚洲无人区码一二三码区别图片| 亚洲色成人网站WWW永久四虎 | 亚洲av女电影网|