如题,应该网络上讲解的是比较多了,我这里只是做一个简单的总结。
首先在工程的src目录下建一个person.xml文件:
好,我们现在就用pull方式来解析这个xml文件,文件内容如下:注意xml文件,几个重要的判断条件:文档开始,文档结束,元素开始,元素结束。元素的属性对应的value,元素的txt值。搞清楚这个就很明白了pull的解析原则了。
为了方便,将xml中的person节点构建成一个model类
/**
* @FILE:Person.java
* @AUTHOR:Administrator
* @DATE:2013-5-5 下午4:20:15
**/
package com.example.entity;
/*******************************************
*
* @CLASS:Person
* @DESCRIPTION:
* @AUTHOR:Administrator
* @VERSION:v1.0
* @DATE:2013-5-5 下午4:20:15
*******************************************/
public class Person {
private Integer id;
private String name;
private Integer age;
public Person() {
}
public Person(Integer id, String name, Integer age) {
this.id = id;
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
再次解析这个xml文件:下面第一句就是用类加载器加载xml文件。
如果xml放在了assets文件夹下,那么就要用另一种方法来加载文件了:InputStream inputStream=getResources().getAssets().open("person.xml");不管用哪种方法加载文件,最终结果都是要获得InputStream对象。
InputStream inputStream = this.getClass().getClassLoader()
.getResourceAsStream("person.xml");
List<Person> persons = PersonService.getPersons(inputStream);
public class PersonService {
public static List<Person> getPersons(InputStream is) {
List<Person> persons = null;
Person person = null;
// 获得一个pull解析器
XmlPullParser pullParser = Xml.newPullParser();
try {
// 为pull解析器提供一个xml文件的输入流
pullParser.setInput(is, "utf-8");
// 获取的事件类型
int event = pullParser.getEventType();
// 对事件类型进行判断(注意这里的常量XmlPullParser)
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())) {
person = new Person();
// 注意这里属性的位数是从0开始
person.setId(new Integer(pullParser
.getAttributeValue(0)));
}
if ("name".equals(pullParser.getName())) {
person.setName(pullParser.getText());
}
if ("age".equals(pullParser.getName())) {
person.setAge(new Integer(pullParser.getText()));
}
break;
case XmlPullParser.END_TAG:
if ("person".equals(pullParser.getName())) {
persons.add(person);
person = null;
}
break;
}
}
// 让pull解析器的指针指向下一个元素
event = pullParser.next();
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return persons;
}
注释应该很明白了,呵呵。就总结到这里吧。