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

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

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


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


          Author: orangelizq
          email: orangelizq@163.com

          歡迎大家訪問我的個人網(wǎng)站 萌萌的IT人
          posted on 2007-07-14 14:43 桔子汁 閱讀(640) 評論(0)  編輯  收藏 所屬分類: Web Service
          主站蜘蛛池模板: 利津县| 阿鲁科尔沁旗| 饶河县| 饶阳县| 阳原县| 屯昌县| 比如县| 绥芬河市| 汉寿县| 保靖县| 板桥市| 大同市| 无极县| 迭部县| 靖边县| 莲花县| 太和县| 苏尼特左旗| 苍溪县| 南靖县| 黄陵县| 建宁县| 五家渠市| 温宿县| 许昌市| 专栏| 唐河县| 延边| 滁州市| 安康市| 宜川县| 长阳| 梨树县| 松阳县| 通城县| 曲阜市| 康定县| 茶陵县| 上林县| 蕲春县| 安溪县|