Pull 解析器的运行方式与 SAX 解析器相似。它提供了类似的事件,如: 开始元素和结束元素事件,使用 parser.next() 可以进入下一个元素并触发相应事件。跟 SAX 不同的 是, Pull 解析器产生的事件是一个数字,而非方法,因此可以使用一个 switch 对感兴趣的事件 进行处理。当元素开始解析时,调用 parser.nextText() 方法可以获取下一个 Text 类型节点的值。
例如解析:person.xml放到src目录下可以使用类装载器载入文件
首先根据xml文件的内容写一个person javabean 和xmlserver 的业务bean
以下是xmlserveryewbean 的解释:
因为xml的person节点有很多个所以方法的返回类型是一个集合(List<Person>)
方法:public List<Person> getPersons(InputStream xml) throws Exception
1,首先需要一个pull解析器:android自带的方法获取一个解析器 XmlPullParser parser=Xml.newPullParser();
2,以流的形式将xml文件载入 parser.setInput(xml,"utf-8");
3,开始解析
<?xml version="1.0" encoding="UTF-8"?>是文档开始
所以:int event=parser.getEvenType();
根据判断event的结果 而作出不同的动作 看主要代码:
java代码
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表示开始文档事件
XmlPullParser.START_TAG: 开始标签
XmlPullParser.END_TAG:结束标签
parser.getName()获取节点的名称
parser.nextText();获取下一个text类型的节点
parser.getAttributeValue(0));获取属性值
event=parser.next();继续下一个元素
parser.getName()获取节点的名称
parser.nextText();获取下一个text类型的节点
parser.getAttributeValue(0));获取属性值
event=parser.next();继续下一个元素