Pull 解析器的运行方式与 SAX 解析器相似。它提供了类似的事件,如: 开始元素和结束元素事件,使用 parser.next() 可以进入下一个元素并触发相应事件。跟 SAX 不同的 是, Pull 解析器产生的事件是一个数字,而非方法,因此可以使用一个 switch 对感兴趣的事件 进行处理。当元素开始解析时,调用 parser.nextText() 方法可以获取下一个 Text 类型节点的值。
public static List<Person> getPersons(InputStream xml)throws Exception{ List<Person> persons=null; Person person=null; XmlPullParser parser=Xml.newPullParser(); parser.setInput(xml, "UTF-8"); int event=parser.getEventType(); while(event!= XmlPullParser.END_DOCUMENT){ switch(event){ case XmlPullParser.START_DOCUMENT: persons=new ArrayList<Person>(); break; case XmlPullParser.START_TAG: if("person".equals(parser.getName())){ Integer personId=new Integer(parser.getAttributeValue(0)); person=new Person(); person.setId(personId); }else if("name".equals(parser.getName())){ String personName=parser.nextText(); person.setName(personName); }else if("age".equals(parser.getName())) person.setAge(new Short(parser.nextText())); break; case XmlPullParser.END_TAG: if("person".equals(parser.getName())){ persons.add(person); person=null; } break; } event=parser.next(); } return persons; }解析一下:XmlPullParser.START_DOCUMENT表示开始文档事件