pull解析器是一个开源的Java项目,Android中已经集成了pull解析器。JavaEE中也可以使用pull解析 , 但要导入jar包 。
pull解析提供了事件,如:开始元素和结束元素,使用parser.next(),可以进入下一个节点
实例:将XML文件解析出来
<?xml version="1.0" encoding="UTF-8"?>
<persons>
<person id="23">
<name>kim</name>
<age>25</age>
</person>
<person id="20">
<name>jinwei</name>
<age>30</age>
</person>
</persons>
将XML文件解析出来
首先建立 一个person类用于存储xml中的person节点
public class Person {
private int id;
private int age;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
其次在处理函数中进行解析,例中XML解析后的数据保存早persons中
public static List<Person> getPersons(InputStream xml) throws Exception{
List<Person> persons = null;
Person person =null;
//首先得到pull解析器
XmlPullParser pullParser =Xml.newPullParser();
//为解析器设置要解析的XML数据
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("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;
}
pullParser.next();//让指针往后解析
}
return persons;
}
说明:
XmlPullParser.START_DOCMENT 文档的开始,即XML中的<?xml version="1.0" encoding="UTF-8"?>这一句
XmlPullParser.START_TAG是标签的开始 如<person>,<name>
XmlPullParser.END_TAG是标签的结束 如</person>,</name>