有如下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; }
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")); } }