使用Android內置的Pull解析器解析XML文件

除了能夠使用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();
 }
} 事件

相關文章
相關標籤/搜索