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

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

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

    posts - 101,  comments - 29,  trackbacks - 0

    <一>簡介

    什么是SAX呢?以前只是聽說SAX,SAX的,但從未接觸,今天學習一下,順便做一下筆記。

    SAX是Simple API for XML的縮寫,它既是一個接口也是一個包。

    SAX是一個解析速度快并且占用內存少的xml解析器,非常適合用于Android等移動設備。 這個不同于DOM解析,DOM是把全部數據放入內存進行解析。

    SAX解析XML文件采用的是事件驅動,也就是說,它并不需要解析完整個文檔。在按內容順序解析文檔的過程中,SAX會判斷當前讀到的字符是否合法XML語法中的某部分,如果符合就會觸發事件。所謂事件,其實就是一些回調方法,這些方法定義在ContentHandler接口中。

    另外一點就是:SAX在解析件的過程中得到自己需要的信息后可以隨時終止解析,并不一定要等文件全部解析完畢。

    有優勢必定優劣勢:SAX采用的是流式處理方式,當遇到某個標簽的時候,它并不會記錄下以前所遇到的標簽,也就是說,在處理某個標簽的時候,比如在startElement方法中,所能夠得到的信息就是標簽的名字和屬性,至于標簽內部的嵌套結構,上層標簽、下層標簽以及其兄弟節點的名稱等等與其結構相關的信息都是不得而知的。實際上就是把XML文件的結構信息丟掉了,如果需要得到這些信息的話,只能你自己在程序里進行處理了。所以相對DOM而言,SAX處理XML文檔沒有DOM方便,SAX處理的過程相對DOM而言也比較復雜。

    <二>ContentHandler接口常用的方法

    startDocument()  

         當遇到文檔的開頭的時候,調用這個方法,可以在其中做一些預處理的工作。
    endDocument()    

         和上面的方法相對應,當文檔結束的時候,調用這個方法,可以在其中做一些善后的工作。 
    startElement(String namespaceURI, String localName, String qName, Attributes atts)    

         當讀到一個開始標簽的時候,會觸發這個方法。namespaceURI就是命名空間,localName是不帶命名空間前綴的標簽名,qName是帶命名空間前綴的標簽        名。通過atts可以得到所有的屬性名和相應的值。要注意的是SAX中一個重要的特點就是它的流式處理,當遇到一個標簽的時候,它并不會紀錄下以前所碰      到的標簽,也就是說,在startElement()方法中,所有你所知道的信息,就是標簽的名字和屬性,至于標簽的嵌套結構,上層標簽的名字,是否有子元屬      等等其它與結構相關的信息,都是不得而知的,都需要你的程序來完成。這使得SAX在編程處理上沒有DOM來得那么方便。
    endElement(String uri, String localName, String name)   

        這個方法和上面的方法相對應,在遇到結束標簽的時候,調用這個方法。
    characters(char[] ch, int start, int length)    

        這個方法用來處理在XML文件中讀到的內容。例如:<name>xiaosi</name> 主要目的是獲取name標簽中的值。

        第一個參數用于存放文件的內容,后面兩個參數是讀到的字符串在這個數組中的起始位置和長度,使用new String(ch,start,length)就可以獲取內容。

    <?xml version="1.0"?> ---------->startDocument()

    <student>             ---------->startElement

       <name>             ---------->startElement

       xiasoi             ---------->characters

       </name>            ---------->endElement

       <id>               ---------->startElement

       090105             ---------->characters

       </id>              ---------->endElement

    </student>            --------->endElement

    文檔結束               --------->startDocument()


    <三>解析步驟

    使用SAX解析XML文件一般有以下五個步驟:
    1、創建一個SAXParserFactory對象(通過類名很容易得知它利用工廠方法模式實現的);
    2、調用SAXParserFactory中的newSAXParser方法創建一個SAXParser對象;
    3、然后在調用SAXParser中的getXMLReader方法獲取一個XMLReader對象;
    4、在XMLReader中注冊事件處理接口,一般有ContentHandler、ErrorHandler、DTDHandler、EntityHandler四種;
    5、調用XMLReader中的parse方法解析指定的XML字符串對象;

    具體實現:

    注意:因為ContentHandler是一個接口,在使用的時候有些不方便,需要全部實現所有的方法,但是有些方法我們會用不到。因此,SAX還為其制定了一個Helper類:DefaultHandler,它實現了這個接口,但是其所有的方法體都為空,在實現的時候,你只需要繼承這個類,然后重載相應的方法即可



    MyContentHandler:




    posted on 2012-04-02 14:52 mixer-a 閱讀(154) 評論(0)  編輯  收藏

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


    網站導航:
     
    主站蜘蛛池模板: 国产精品免费久久| 久久久久久亚洲AV无码专区| 亚洲av一本岛在线播放| 久久不见久久见免费视频7| 亚洲AV永久无码精品成人| 国产日韩AV免费无码一区二区| 亚洲gv白嫩小受在线观看| 一区二区三区观看免费中文视频在线播放 | 在线免费观看韩国a视频| 中文字幕 亚洲 有码 在线| 青青久在线视频免费观看| 国产精品亚洲一区二区麻豆| 精品亚洲成A人在线观看青青| 日本免费观看网站| 黄色网页免费观看| 亚洲乱色熟女一区二区三区丝袜| 99热在线日韩精品免费| 久久久无码精品亚洲日韩蜜桃 | 黄色一级毛片免费| 国产精品亚洲mnbav网站 | 香蕉免费在线视频| 日本不卡免费新一二三区| 精品免费AV一区二区三区| 亚洲色婷婷一区二区三区| 久久成人a毛片免费观看网站| 亚洲最大黄色网站| 免费国产在线观看老王影院| 色偷偷女男人的天堂亚洲网| 国产精品无码一二区免费| 美女无遮挡拍拍拍免费视频| 亚洲毛片基地日韩毛片基地| 国产国产人免费视频成69大陆 | 精品国产_亚洲人成在线高清| 黄网站色成年片大免费高清 | 一个人在线观看视频免费| 亚洲1区2区3区精华液| 国产成人精品日本亚洲网站| 9久热这里只有精品免费| 亚洲同性男gay网站在线观看| 免费夜色污私人影院在线观看| 日本在线免费观看|