1 public class Test extends TestCase {
2
3 public void test() throws IllegalStateException, RuntimeException, IOException {
4 writeXMLTOLocal();
5
6 List<Person> personList = parserXmlFromLocal();
7
8 for (Person person : personList) {
9 Log.i("TestCase", person.toString());
10 }
11 }
12
13 public void writeXMLTOLocal() throws RuntimeException,
14 IllegalStateException, IOException {
15 List<Person> personlist = getPersondList();
16 // 获得序列化对象
17 XmlSerializer serializer = Xml.newSerializer();
18
19 File path = new File(Environment.getExternalStorageDirectory(),
20 "person.xml");
21 FileOutputStream fos;
22 try {
23 fos = new FileOutputStream(path);
24 serializer.setOutput(fos, "utf-8");
25
26 serializer.startDocument("utf-8", true);
27 serializer.startTag(null, "persons");
28
29 for (Person person : personlist) {
30 serializer.startTag(null, "person");
31 serializer.attribute(null, "id", String.valueOf(person.getId()));
32
33 serializer.startTag(null, "name");
34 serializer.text(person.getName());
35 serializer.endTag(null, "name");
36
37 // 写年龄
38 serializer.startTag(null, "age"); // <age>
39 serializer.text(String.valueOf(person.getAge()));
40 serializer.endTag(null, "age"); // </age>
41
42 serializer.endTag(null, "person"); // </person>
43 }
44
45 serializer.endTag(null, "persons"); // </persons>
46
47 serializer.endDocument(); // 结束
48 } catch (FileNotFoundException e) {
49 // TODO Auto-generated catch block
50 e.printStackTrace();
51 }
52
53 }
54
55 private List<Person> parserXmlFromLocal() {
56 try {
57 File path = new File(Environment.getExternalStorageDirectory(), "person.xml");
58 FileInputStream fis = new FileInputStream(path);
59
60 // 获得pull解析器对象
61 XmlPullParser parser = Xml.newPullParser();
62 // 指定解析的文件和编码格式
63 parser.setInput(fis, "utf-8");
64
65 int eventType = parser.getEventType(); // 获得事件类型
66
67 List<Person> personList = null;
68 Person person = null;
69 String id;
70 while(eventType != XmlPullParser.END_DOCUMENT) {
71 String tagName = parser.getName(); // 获得当前节点的名称
72
73 switch (eventType) {
74 case XmlPullParser.START_TAG: // 当前等于开始节点 <person>
75 if("persons".equals(tagName)) { // <persons>
76 personList = new ArrayList<Person>();
77 } else if("person".equals(tagName)) { // <person >
78 person = new Person();
79 id = parser.getAttributeValue(null, "id");
80 person.setId(Integer.valueOf(id));
81 } else if("name".equals(tagName)) { // <name>
82 person.setName(parser.nextText());
83 } else if("age".equals(tagName)) { // <age>
84 person.setAge(Integer.parseInt(parser.nextText()));
85 }
86 break;
87 case XmlPullParser.END_TAG: // </persons>
88 if("person".equals(tagName)) {
89 // 需要把上面设置好值的person对象添加到集合中
90 personList.add(person);
91 }
92 break;
93 default:
94 break;
95 }
96
97 eventType = parser.next(); // 获得下一个事件类型
98 }
99 return personList;
100 } catch (Exception e) {
101 e.printStackTrace();
102 }
103 return null;
104 }
105 private List<Person> getPersondList() {
106 List<Person> personlist = new ArrayList<Person>();
107 for (int i = 0; i < 30; i++) {
108 personlist.add(new Person(i, "wang" + i, 18 + i));
109 }
110
111 return personlist;
112 }
113
114 }