除了能夠使用SAX或DOM解釋XML文件以外,你們也能夠使用Android內置的Pull解釋器解釋XML文件。Pull解釋器是一個開源的java項目,既能夠用於android,也能夠用於JavaEE。若是用在JavaEE須要把其jar文件放入類路徑中,由於Android已經集成進了Pull解釋器,因此無需添加任何jar文件。android系統自己使用到各類xml文件,其內部也是採用Pull解釋器進行解釋的。Pull解釋器的運行方式與SAX解釋器類似。它提供了相似的時間,如:開始元素和結束元素時間,使用parser.next()能夠進入下一個元素並觸發相應事件。跟SAX不一樣的是,Pull解釋器產生的事件是一個數字,而非方法,所以能夠使用一個switch對感興趣的事件進行處理。當元素開始解釋時,調用parser.nextText()方法能夠獲取下一個Text類型節點的值。 html
Pull解釋器的源碼及文檔下載網址:http://xmlpull.org/xmlpull-website/impls.shtml java
package cn.itcast.service; android
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List; web
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlSerializer; dom
import android.util.Xml; xml
import cn.itcast.domain.Person; htm
public class PersonService {
/**
* 獲取數據
* @param xml
* @return
* @throws Exception
*/
public static List<Person> getPersons(InputStream xml) throws Exception{
List<Person> persons = null;
Person person = null;
XmlPullParser pullParser = Xml.newPullParser();
pullParser.setInput(xml, "UTF-8");//爲Pull解析器設置要解析的XML數據
int event = pullParser.getEventType();
while(event != XmlPullParser.END_DOCUMENT){
switch (event) {
case XmlPullParser.START_DOCUMENT:
persons = new ArrayList<Person>();
break;
case XmlPullParser.START_TAG:
if("person".equals(pullParser.getName())){
int id = new Integer(pullParser.getAttributeValue(0));
person = new Person();
person.setId(id);
}
if("name".equals(pullParser.getName())){
String name = pullParser.nextText();
person.setName(name);
}
if("age".equals(pullParser.getName())){
int age = new Integer(pullParser.nextText());
person.setAge(age);
}
break;
case XmlPullParser.END_TAG:
if("person".equals(pullParser.getName())){
persons.add(person);
person = null;
}
break;
}
event = pullParser.next();
}
return persons;
}
/**
* 保存數據
* @param persons 數據
* @param out 輸出方向
* @throws Exception
*/
public static void save(List<Person> persons, OutputStream out) throws Exception{
XmlSerializer serializer = Xml.newSerializer();
serializer.setOutput(out, "UTF-8");
serializer.startDocument("UTF-8", true);
serializer.startTag(null, "persons");
for(Person person : persons){
serializer.startTag(null, "person");
serializer.attribute(null, "id", person.getId().toString());
serializer.startTag(null, "name");
serializer.text(person.getName());
serializer.endTag(null, "name");
serializer.startTag(null, "age");
serializer.text(person.getAge().toString());
serializer.endTag(null, "age");
serializer.endTag(null, "person");
}
serializer.endTag(null, "persons");
serializer.endDocument();
out.flush();
out.close();
}
} 事件