1 <?xml version="1.0" encoding="UTF-8"?>
2 <persons>
3 <person id="1">
4 <name>zhangsan</name>
5 <age>22</age>
6 <sex>boy</sex>
7 </person>
8 <person id="2">
9 <name>李四</name>
10 <age>20</age>
11 <sex>女</sex>
12 </person>
13 </persons>
解析以上person.xml
PULL解析:基于事件拉取
5个属性:每一个事件对应一个常量
START_DOCUMENT:开始文档 常量值 0
START_TAG:开始标签 2
TEXT: 文本 常量值 4
END_TAG: 结束标签 3
END_DOCUMENT: 结束文档 1
非常重要的方法:
next():检索下一个事件
例1. 创建了Person类。
1 import java.io.FileInputStream;
2 import java.io.IOException;
3 import java.util.ArrayList;
4 import java.util.List;
5
6 import org.xmlpull.v1.XmlPullParser;
7 import org.xmlpull.v1.XmlPullParserException;
8 import org.xmlpull.v1.XmlPullParserFactory;
9
10 public class Demo3 {
11
12 public static void main(String[] args) throws XmlPullParserException,
13 IOException {
14 // 1、获取pull解析器的对象工厂
15 XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
16 // 2、从工厂对象中获取解析器
17 XmlPullParser parser = factory.newPullParser();
18 // 3、设置解析文档
19 parser.setInput(new FileInputStream("src/person.xml"), "utf-8");
20 // 4、开始解析
21 List<Person> list = null;
22 Person p = null;
23 // 获取事件类型
24 int type = parser.getEventType();
25 while (type != XmlPullParser.END_DOCUMENT) {
26 String tagName = parser.getName();
27 switch (type) {
28 case XmlPullParser.START_TAG:
29 if ("persons".equals(tagName)) {
30 // 如果开始标记是persons,应该创建集合
31 list = new ArrayList<Person>();
32 } else if ("person".equals(tagName)) {
33 // 如果开始标记是person,应该创建person对象
34 p = new Person();
35 if (parser.getAttributeCount() > 0) {
36 // 获取属性id的值,赋值给person对象的id属性
37 p.setId(parser.getAttributeValue(0));// 第一个属性
38 }
39 } else if ("name".equals(tagName)) {
40 p.setName(parser.nextText());
41 } else if ("age".equals(tagName)) {
42 p.setAge(Integer.parseInt(parser.nextText()));
43 } else if ("sex".equals(tagName)) {
44 p.setSex(parser.nextText());
45 }
46 break;
47 case XmlPullParser.END_TAG:
48 if ("person".equals(tagName)) {
49 // </person> 将Person放入list集合
50 list.add(p);
51 }
52 break;
53 }
54 // 很重要的步骤:获取下次事件类型
55 type = parser.next();
56 }
57 // 打印list
58 for (Person per : list) {
59 System.out.println(per);
60 }
61 }
62
63 static class Person {
64 private String id;
65 private String name;
66 private int age;
67 private String sex;
68
69 public Person() {
70 super();
71 }
72
73 public Person(String id, String name, int age, String sex) {
74 super();
75 this.id = id;
76 this.name = name;
77 this.age = age;
78 this.sex = sex;
79 }
80
81 public String getId() {
82 return id;
83 }
84
85 public void setId(String str) {
86 this.id = str;
87 }
88
89 public String getName() {
90 return name;
91 }
92
93 public void setName(String name) {
94 this.name = name;
95 }
96
97 public int getAge() {
98 return age;
99 }
100
101 public void setAge(int age) {
102 this.age = age;
103 }
104
105 public String getSex() {
106 return sex;
107 }
108
109 public void setSex(String sex) {
110 this.sex = sex;
111 }
112
113 @Override
114 public String toString() {
115 return "Person [id=" + id + ", name=" + name + ", age=" + age
116 + ", sex=" + sex + "]";
117 }
118
119 }
120 }