使用PULL解析XML文件

 Pull解析器的运行方式与 SAX 解析器相似。它提供了类似的事件,如:开始元素和结束元素事件,使用parser.next()可以进入下一个元素并触发相应事件。事件将作为数值代码被发送,因此可以使用一个switch对感兴趣的事件进行处理。当元素开始解析时,调用parser.nextText()方法可以获取下一个Text类型节点的值。

代码如下:

public static List<Person> getPersons(InputStream inStream) throws Throwable{
  List<Person> persons = null;
  Person person = null;
   XmlPullParser parser = Xml.newPullParser();
  parser.setInput(inStream, "UTF-8");
  int eventType = parser.getEventType();//产生第一个事件
  while(eventType!=XmlPullParser.END_DOCUMENT){//只要不是文档结束事件
   switch (eventType) {
   case XmlPullParser.START_DOCUMENT:
    persons = new ArrayList<Person>();
    break;
 
   case XmlPullParser.START_TAG:
    String name = parser.getName();//获取解析器当前指向的元素的名称
    if("person".equals(name)){
     person = new Person();// 在这个地方实例化避免了一遇到别的开始标签就重新实例化,导致前面传入的参数为空
     person.setId(new Integer(parser.getAttributeValue(0)));
    }
    if(person != null){
     if("name".equals(name)){
      person.setName(parser.nextText());//获取解析器当前指向元素的下一个文本节点的值
     }
     if("age".equals(name)){
      person.setAge(new Short(parser.nextText()));
     }
    }
    break;
    
   case XmlPullParser.END_TAG:
    if("person".equals(parser.getName())){
     persons.add(person);
     person = null;
    }
    break;
   }
   eventType = parser.next();
  }
  return persons;
 } 

你可能感兴趣的:(xml,String,null,Integer,文档)