1.Pull簡介
Pull解析器是Android系統內建的的,Pull解析器與SAX解析器類似,他提供了類似的事件,如開始元素和介紹元素的事件,使用parser.next()可以進入下一個元素並觸發相應的事件,然後進行相應的處理,當元素開始解析時,調用perser.nextText()方法就可以擷取到下一個Text類型元素的值。
2.pull特點
一.簡單的結構,一個介面,一個另外,一個工廠組成了Pull解析器
二.簡單易用,Pull解析器只有一個重要的方法next(),他被用來檢索下一個事件,而他的事件也僅僅只有五個,START_DOCUMENT, START_TAG ,TEXT, END_TAG, END_DOCUMENT
三.最小的記憶體消耗,Pull解析器和SAX解析器一樣,對記憶體的暫用少,但是SAX解析稍微有點繁瑣,DOM很耗記憶體,所以Pull被推薦使用
3,樣本 Pull解析XML
先在src目錄先建立一個android.xml
<?xml version="1.0" encoding="UTF-8"?><persons> <person id="23"> <name>xiaanming</name> <age>23</age> </person> <person id="20"> <name>liudehua</name> <age>28</age> </person></persons>
建立一個PullXMLService
package com.example.pull_parser;import java.io.InputStream;import java.util.ArrayList;import java.util.List;import org.xmlpull.v1.XmlPullParser;import android.util.Log;import android.util.Xml;public class PullXMLService {public static List<Person> readXML() throws Exception{//擷取src目錄下面的android.xml檔案的輸入資料流InputStream is = PullXMLService.class.getClassLoader().getResourceAsStream("android.xml");//用來存放解析的Person對象List<Person> persons = null;//一個標記boolean flag = false;Person person = null;//執行個體化一個XmlPullParser對象XmlPullParser parser = Xml.newPullParser();//設定輸入資料流和編碼parser.setInput(is, "UTF-8");//觸發了第一個事件,根據XML的文法,也就是從他開始瞭解文檔int eventCode = parser.getEventType();//如果獲得的事件碼如果是文檔的結束,那麼解析結束while (eventCode != XmlPullParser.END_DOCUMENT) {switch(eventCode){case XmlPullParser.START_DOCUMENT:{//開始解析的時候我們一般做一些初始化的操作persons = new ArrayList<Person>();break;}case XmlPullParser.START_TAG:{//判斷當前的元素是否是需要檢索的元素if("person".equals(parser.getName())){flag = true;person = new Person();person.setId(Integer.valueOf(parser.getAttributeValue(0)));}if(flag){if("name".equals(parser.getName())){person.setName(parser.nextText());}else if("age".equals(parser.getName())){person.setAge(Integer.valueOf(parser.nextText()));}}break;}case XmlPullParser.END_TAG:{if("person".equals(parser.getName()) && person != null){flag = false;persons.add(person);Log.e("log", person.toString());person = null;}break;}}//這一步很重要,該方法返回一個事件碼,也是觸發下一個事件的方法eventCode = parser.next();}return persons;}}
好了,這樣子就解析完了android.xml 是不是很方便很簡單呢,比SAX和DOM要更容易理解,如果對SAX解析和對DOM解析不熟悉的朋友可以看我的那兩篇部落格
DOM解析XML
SAX解析XML