XML解析中SAX和Pull的區別

如果在一個XML文檔中我們只需要前面一部分數據,但是使用SAX方式或DOM方式會對整個文檔進行解析,儘管XML文檔中後面的大部分數據我們其實都不需要解析,因此這樣實際上就浪費了處理資源。使用PULL方式正合適。
Pull解析器和SAX解析器雖有區別但也有相似性。
他們的區別爲:SAX解析器的工作方式是自動將事件推入註冊的事件處理器進行處理,因此你不能控制事件的處理主動結束;
而Pull解析器的工作方式爲允許你的應用程序代碼主動從解析器中獲取事件,正因爲是主動獲取事件,因此可以在滿足了需要的條件後不再獲取事件,結束解析。這是他們主要的區別。
而他們的相似性在運行方式上,Pull解析器也提供了類似SAX的事件,開始文檔START_DOCUMENT和結束文檔END_DOCUMENT,開始元素START_TAG和結束元素END_TAG,遇到元素內容TEXT等,但需要調用next() 方法提取它們(主動提取事件)。
Android系統中和Pull方式相關的包爲org.xmlpull.v1,在這個包中提供了Pull解析器的工廠類XmlPullParserFactory和Pull解析器XmlPullParser,XmlPullParserFactory實例調用newPullParser方法創建XmlPullParser解析器實例,接着XmlPullParser實例就可以調用getEventType()和next()等方法依次主動提取事件,並根據提取的事件類型進行相應的邏輯處理。
    //創建XmlPullParser,有兩種方式   
    //方式一:使用工廠類XmlPullParserFactory   
    XmlPullParserFactory pullFactory = XmlPullParserFactory.newInstance();   
    XmlPullParser xmlPullParser = pullFactory.newPullParser();   
    //方式二:使用Android提供的實用工具類android.util.Xml  
    XmlPullParser xmlPullParser = Xml.newPullParser(); 
    XmlPullParser.setInput(InputStream inputStream, String inputEncoding) //解析對應的輸入文件
    XmlPullParser.getEventType() //得到元素
判斷元素是否是START_DOCUMENT、END_DOCUMENT、START_TAG、END_TAG、TEXT中的那種,進行相應解析。
PULL方式比較簡單,而且可以根據判斷停止解析(DOM和SAX都需要對文件的文章解析中途不能停止)。
發佈了20 篇原創文章 · 獲贊 9 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章