有如下xml文件:
<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
<persons>
<person id="1">
<name>范冰冰</name>
<age>31</age>
</person>
<person id="2">
<name>林志玲</name>
<age>38</age>
</person>
<person id="3">
<name>杨幂</name>
<age>26</age>
</person>
</persons>
1.使用XmlPullParser读取xml文件:
public List<Person> loadPersons(InputStream in) throws Exception {
XmlPullParser parser = Xml.newPullParser(); // 获取解析器
parser.setInput(in, "UTF-8"); // 设置输入流, 指定码表
ArrayList<Person> persons = new ArrayList<Person>();
Person p = null;
// 最初type赋值为第一个事件, 只要不是文档结束就循环, 每次循环后解析下一个事件
for (int type = parser.getEventType(); type != XmlPullParser.END_DOCUMENT; type = parser.next()) {
if (type == XmlPullParser.START_TAG) { // 如果遇到了标签开始事件
if (parser.getName().equals("person")) { // 如果标签名为"person"
p = new Person(); // 创建对象
String id = parser.getAttributeValue(0); // 获取第一个属性的属性值
p.setId(Integer.parseInt(id)); // 转为int, 设置id
persons.add(p); // 装入集合
} else if (parser.getName().equals("name")) { // 如果标签名为"name"
String name = parser.nextText(); // 获取下一个文本
p.setName(name); // 设置name
} else if (parser.getName().equals("age")) { // 如果标签名为"age"
String age = parser.nextText(); // 获取下一个文本
p.setAge(Integer.parseInt(age)); // 设置age
}
}
}
return persons;
}
2.使用XmlPullParser保存数据到xml文件
public void savePersons(List<Person> persons, OutputStream out) throws IOException {
XmlSerializer serializer = Xml.newSerializer(); // 获取序列化工具
serializer.setOutput(out, "UTF-8"); // 设置输出流, 指定码表
//Standalone属性是可选项,表示xml文档是否需要引用其他文件。取值为yes表示不引用,no表示引用,缺省值为no
serializer.startDocument("UTF-8", true); // 开始文档,设置编码方式 和 Standalone值
serializer.startTag(null, "persons"); // 开始标签
for (Person p : persons) {
serializer.startTag(null, "person");
serializer.attribute(null, "id", p.getId().toString()); // 设置属性
serializer.startTag(null, "name");
serializer.text(p.getName()); // 设置文本
serializer.endTag(null, "name");
serializer.startTag(null, "age");
serializer.text(p.getAge().toString());
serializer.endTag(null, "age");
serializer.endTag(null, "person");
}
serializer.endTag(null, "persons"); // 结束标签
serializer.endDocument(); // 结束文档
}
3.Test类
public class PersonTest extends AndroidTestCase {
public void testLoad() throws Exception {
PersonService service = new PersonService();
//读取xml文件,person.xml在src目录下
InputStream in = PersonTest.class.getClassLoader().getResourceAsStream("persons.xml");
List<Person> persons = service.loadPersons(in);
for (Person p : persons)
System.out.println(p);
//保存数据到xml文件中
Person p = new Person(4, "张红", 18);
persons.add(p);
service.savePersons(persons, new FileOutputStream("/mnt/sdcard/persons.xml"));
}
}