<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)  編輯  收藏

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


    網站導航:
     
    主站蜘蛛池模板: 亚洲国产精品综合久久2007| 亚洲国产精品久久久久婷婷老年| 亚洲熟妇无码一区二区三区| 久久经典免费视频| 亚洲成a人片在线观看中文app | 精品亚洲一区二区| 国产在线播放线91免费| 好看的电影网站亚洲一区| 久久精品无码精品免费专区| 婷婷精品国产亚洲AV麻豆不片| 久久青草精品38国产免费| 久久久亚洲欧洲日产国码二区 | 国产一级淫片a视频免费观看| 狠狠综合亚洲综合亚洲色| 亚洲第一页日韩专区| 久久一区二区三区免费| 国产亚洲一区二区三区在线| 亚洲精品在线免费观看| 亚洲人成电影网站色| 亚洲一级片免费看| 国产激情免费视频在线观看| 亚洲二区在线视频| 宅男666在线永久免费观看| 一个人看的在线免费视频| 久久精品国产精品亚洲艾草网| 91嫩草免费国产永久入口| 国产精品亚洲综合久久| 亚洲精品一级无码鲁丝片| 无码国产精品一区二区免费式芒果| 亚洲av成人一区二区三区| 亚洲Av无码乱码在线znlu| 日本高清高色视频免费| 亚洲av永久无码精品天堂久久| 啊v在线免费观看| 无码日韩精品一区二区三区免费| 亚洲制服丝袜中文字幕| 亚洲第一区精品观看| 100部毛片免费全部播放完整| 久久亚洲精品无码av| 亚洲AV永久精品爱情岛论坛| 免费看国产成年无码AV片|