/* * 2014年12月30日19:50:25 * 调用writeXmlToLocal()方法把xml序列化到本地 * 调用parserXmlToLocal()方法解析xml */ 首先创建一个用于测试的类Person public class Person { private int id; private String name; private int age; public Person() { super(); } public Person(int id, String name, int age) { super(); this.id = id; this.name = name; this.age = age; } public String toString() { return "Person [id=" + id + ", name=" + name + ", age=" + age + "]"; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } //把xml序列化到本地 private void writeXmlToLocal() { List<person> personlist = getPersonList(); try { File path = new File(Environment.getExternalStorageDirectory(),"persons.xml"); FileOutputStream fos = new FileOutputStream(path); //指定序列化对象输出的位置和编码 XmlSerializer serializer = Xml.newSerializer(); serializer.setOutput(fos, "utf-8"); //开始写<?xml version="1.0" encoding="UTF-8" standelone="yes" ?> serializer.startDocument(null,true); //设置开始节点 serializer.startTag(null, "persons"); //<persons> for(Person person:personlist) { System.err.println(person.getName()); //开始写人 serializer.startTag(null, "person"); // <person> serializer.attribute(null, "id", String.valueOf(person.getId())); //写名字 serializer.startTag(null, "name"); // <name> serializer.text(person.getName()); serializer.endTag(null, "name"); // </name> serializer.startTag(null, "age"); // <age> serializer.text(String.valueOf(person.getAge())); serializer.endTag(null, "age"); // </age> serializer.endTag(null, "person"); // </person> } serializer.endTag(null, "persons"); //</persons> serializer.endDocument(); //结束 } catch (Exception e) { e.printStackTrace(); } } //解析xml private List<person> parserXmlToLocal() { List<person> personlist = null; try { //获取要解析文件 File path = new File(Environment.getExternalStorageDirectory(),"persons.xml"); FileInputStream fis = new FileInputStream(path); //创建pull解析器对象 XmlPullParser parser = Xml.newPullParser(); //指定要解析的文件和编码格式 parser.setInput(fis, "utf-8"); //获得事件类型 int eventType = parser.getEventType(); String togName = null; Person person = null; while(eventType != parser.END_DOCUMENT) { togName = parser.getName(); //获取当前节点的名称 switch (eventType) { case XmlPullParser.START_TAG: switch (togName) { case "persons": // <persons> personlist = new ArrayList<person>(); break; case "person": // <person id=""> person = new Person(); person.setId(Integer.valueOf(parser.getAttributeValue(null, "id"))); //得到并设置id break; case "name": // <name> person.setName(parser.nextText()); break; case "age": // <age> person.setAge(Integer.valueOf(parser.nextText())); break; default: break; } break; case XmlPullParser.END_TAG: if("person".equals(togName)) // </age></name></person> { //把上面设置好的person添加到personlist集合中 personlist.add(person); } break; default: break; } eventType = parser.next(); //获取下一个节点的类型 } } catch (Exception e) { e.printStackTrace(); } return personlist; } private List<person> getPersonList() { List<person> personlist = new ArrayList<person>(); Person temp = null; for(int i=0; i<30; i++) { temp = new Person(i, "wang"+i, 18+i); personlist.add(temp); } return personlist; } </person></person></person></person></persons></person></person></person>