1 import java.io.FileInputStream;
2 import java.io.FileOutputStream;
3 import java.util.ArrayList;
4 import java.util.List;
5
6 import org.xmlpull.v1.XmlPullParser;
7 import org.xmlpull.v1.XmlSerializer;
8
9 import android.util.Log;
10 import android.util.Xml;
11
12 import com.itheima27.xmlparserserializer.entities.Person;
13
14 public class XmlUtils {
15
16 private static final String TAG = "XmlUtils";
17
18 /**
19 * 把数据以xml形式写到本地
20 */
21 public void writeToLocal() throws Exception {
22
23 List<Person> personList = new ArrayList<Person>();
24 for (int i = 0; i < 30; i++) {
25 personList.add(new Person(i, "王" + i, 20 + i));
26 }
27
28 XmlSerializer serializer = Xml.newSerializer(); // 创建Xmlserializer的对象
29 // 指定序列化对象输出的流
30 FileOutputStream fos = new FileOutputStream("/mnt/sdcard/person.xml");
31 serializer.setOutput(fos, "utf-8");
32
33 serializer.startDocument("utf-8", true); // 写xml头
34
35 serializer.startTag(null, "persons"); // 开始的根节点
36
37 for (Person person : personList) {
38 serializer.startTag(null, "person");
39 serializer.attribute(null, "id", String.valueOf(person.getId()));
40
41 // 写人的姓名
42 serializer.startTag(null, "name");
43 serializer.text(person.getName());
44 serializer.endTag(null, "name");
45
46 // 写人的年龄
47 serializer.startTag(null, "age");
48 serializer.text(String.valueOf(person.getAge()));
49 serializer.endTag(null, "age");
50
51 serializer.endTag(null, "person");
52 }
53
54 serializer.endTag(null, "persons"); // 结束的根节点
55
56 serializer.endDocument(); // 标记xml输出完毕
57 }
58
59 /**
60 * 从本地文件解析xml数据
61 */
62 public void parserXmlFromLocal() throws Exception {
63 // 创建Pull解析器对象
64 XmlPullParser parser = Xml.newPullParser();
65 // 指定解析的文件
66 FileInputStream fis = new FileInputStream("/mnt/sdcard/person.xml");
67 parser.setInput(fis, "UTF-8");
68
69 int eventType = parser.getEventType(); // 获得解析器的第一个事件类型
70
71 List<Person> personList = null;
72 Person person = null;
73 String name;
74
75 while(eventType != XmlPullParser.END_DOCUMENT) { // 如果事件类型不等于结束的类型, 继续循环
76 String tagName = parser.getName(); // 获得当前节点的名称
77
78 // 解析数据
79 switch (eventType) {
80 case XmlPullParser.START_TAG: // 代表开始节点 <persons>
81
82 if("persons".equals(tagName)) {
83 // 初始化集合
84 personList = new ArrayList<Person>();
85 } else if("person".equals(tagName)) {
86 person = new Person();
87 person.setId(Integer.valueOf(parser.getAttributeValue(null, "id")));
88 } else if("name".equals(tagName)) {
89 name = parser.nextText(); // 当前是<name> 节点 nextText是取<name> 后边的值
90 person.setName(name);
91 } else if("age".equals(tagName)) {
92 person.setAge(Integer.parseInt(parser.nextText()));
93 }
94 break;
95 case XmlPullParser.END_TAG: // 代表结束节点 </person>
96 if("person".equals(tagName)) { // 当前是</person>
97 // 把上面person的对象添加到集合中
98 personList.add(person);
99 }
100 break;
101 default:
102 break;
103 }
104
105 eventType = parser.next(); // 赋值下一个事件类型
106 }
107
108
109 if(personList != null) {
110 for (Person p : personList) {
111 Log.i(TAG, p.toString());
112 }
113 }
114 }
115 }