天天看點

SAX、DOM、PULL解析XML

-------------------------------------SAX解析xml----------------------------------

》Sax定義

         SAX是一個解析速度快并且占用記憶體少的xml解析器,非常适合用于android等移動裝置

         SAX全稱是Simple API for Xml,既是指一種接口,也是一個軟體包

         作為接口,sax是事件驅動型xml解析的一個标準接口

》Sax特點

        1. 解析效率高,占用記憶體少

        2.可以随時停止解析

        3.不能載入整個文檔到記憶體

        4.不能寫入xml

        5.SAX解析xml檔案采用的是事件驅動

---sax并不需要解析完 整個文檔,在按内容順序解析文檔的過程中,sax會判斷目前讀到的字元是否合法xml文法中的某部分,如果符合就會觸發事件

》Sax工作原理

         Sax的工作原理簡單的說,就是對文檔進行順序掃描,掃描到文檔(document)開始與結束,掃描到元素(element)開始、結束等地方時調用事件處理

         處理函數做相應動作,然後繼續掃描,直到文檔結束。

》Sax解析文檔過程

           1.繼承DefaultHandler  ,并實作方法      

           2.建立SAX解析器工廠

           3.獲得解析器

           4.獲得輸入流

           5.使用輸入流,和實作接口作參數,調用解析器的解析方法進行解析

》defaultHandler 接口是實作contentHandler接口

         ContentHandler接口中的常用方法

                 >startDocument()

                            當遇到文檔開頭的時候,調用這個方法,可以在其中做一些與準備工作

                 >endDocument()

                             當文檔結束的時候,調用這個方法,可以在其中做一些善後工作

                 >startElement(String namespaceURL, String localName, String qName, Attributes atts)

                             當讀到一個開始标簽的時候,會觸發這個方法。namespaceURL就是命名空間,localName是不帶命名空間字首的标簽名,

                             qName是待命名空間字首的标簽名。通過atts可以得到所有的屬性名和相應的值。

                 >endElement(String uri, String localName, String name)

                            當遇到結束标簽的時候,調用這個方法

                  >characters(char[] ch, int start, int length)

                            這個方法用來處理在xml檔案中讀到的内容,第一個參數為檔案的字元串内容,後面兩個參數是讀到的字元串在這個數組中的起始位置和長度,

                            使用new String(ch, start, length)就可以擷取内容

---------------------------------------Dom解析Xml--------------------------------------------

》DOM簡介

        dom全稱Document Object Model ,為xml文檔的已解析版本定義了一組接口。解析器讀入整個文檔,然後建構一個主流記憶體的樹結構,

         然後代碼就可以使用dom接口來操作這個樹結構

》DOM的特點

         >優點

                  1.整個文檔樹在記憶體中,便于操作;支援删除、修改、重新排列等多種功能

                  2.通過樹形結構存取xml文檔

                  3.可以在樹的某個節點上向前或向後移動

           >缺點

                  1.将整個文檔調入記憶體(包括無用的節點),浪費時間和空間

            >适用場合

                  一旦解析了文檔還需多次通路這些資料;硬體資源充足(記憶體,cpu)

》DOM解析步驟

      1.建立解析器工廠

      2.獲得解析器工廠

      3.接受一個xml文檔作為輸入參數名,并得到一個xml的文檔對象(Document)

      4.操作文檔對象

--------------------------------------pull解析-----------------------------

》pull解析器簡介

        1.pull解析器是android内置的解析器,解析原理與sax類似

        2.pull它提供了類似的事件。

              如:開始元素和結束元素事件,使用parse.next()可以進入下一個元素并觸發相應的事件,事件将作為數值代碼被發送

                      是以可以使用一個switch對感興趣的事件進行處理。當元素開始解析時,調用parser.nextText()方法擷取下一個Text類型節點的值

》pull與sax的不同之處

          1.pull讀取xml檔案後觸發相應的事件調用方法傳回的是數字。

          2.pull可以在程式中控制,想解析到哪裡就可以停止到哪裡

          3.Android中更推薦使用pull解析

》pull解析步驟

      1.建立解析器對象

          XmlPullParser paser = Xml.newPullParser();

      2.進行解析

             paser.setInput(input,"utf-8");

      3.産生第一個解析事件

              int eventType = paser.getEventType();

       4.可以使用循環判斷是否繼續解析

                while(eventType!=XmlPullParser.END_DOCUMENT){}