使用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类型节点的值。
 
使用Pull解析器读取itcast.xml的代码在本页下方备注
 
Pull解析器的源码及文档下载网址:http://xmlpull.org/xmlpull-website/impls.shtml
 
1、
public class PersonService {
 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");
  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("age".equals(pullParser.getName())){
     int age=new Integer(pullParser.nextText());
     person.setAge(age);
    }
    if("name".equals(pullParser.getName())){
     String name=pullParser.nextText();
     person.setName(name);
    }
    break;
   case XmlPullParser.END_TAG:
    if("person".equals(pullParser.getName())){
     persons.add(person);
     person=null;
    }
    break;
   }
   event=pullParser.next();
  }
  return persons;
 }
调用上述方法

private static final String TAG = "PersonsServiceTest";


 public void testGetPersons()throws Exception{   

InputStream xml=this.getClass().getClassLoader().getResourceAsStream("person.xml");   //person.xml在src文件夹里

PersonService personservice=new PersonService();   

List<Person> persons=personservice.getPersons(xml);   

for(Person person : persons){    Log.i(TAG, person.toString());   }  }

2、也可以
public List<Person> getPersonsT(XmlResourceParser xml)throws Exception{
  List<Person> persons=null;
  Person person=null;
  int event=xml.getEventType();
  while(event!=XmlResourceParser.END_DOCUMENT){
   switch (event) {
   case XmlResourceParser.START_DOCUMENT:
    persons=new ArrayList<Person>();
    break;
   case XmlResourceParser.START_TAG:
    if("person".equals(xml.getName())){
     int id=new Integer(xml.getAttributeValue(0));
     person=new Person();
     person.setId(id);
    }
    if("age".equals(xml.getName())){
     int age=new Integer(xml.nextText());
     person.setAge(age);
    }
    if("name".equals(xml.getName())){
     String name=xml.nextText();
     person.setName(name);
    }
    break;
   case XmlResourceParser.END_TAG:
    if("person".equals(xml.getName())){
     persons.add(person);
     person=null;
    }
    break;
   }
   event=xml.next();
  }
  return persons;
 }
}

调用上述方法
public void testGetPersonsT()throws Exception{
  XmlResourceParser xml=getContext().getResources().getXml(R.xml.person);//person.xml在xml文件夹里
  PersonService personservice=new PersonService();
  List<Person> persons=personservice.getPersonsT(xml);
  for(Person person : persons){
   Log.i(TAG, person.toString());
  }
 }
原文地址:https://www.cnblogs.com/wdc224/p/3920558.html