pull解析需要自行载入jar包,本文以解析一个student.xml文件为例
1、Pull,以事件常量的方法进行解析
2、解析之后存储数据
a:List<Student>
b:List<Map<String,Object>>
3、pull解析的事件常量
(XmlPullParser.START_DOCUMENT);//0 开始解析文档
(XmlPullParser.END_DOCUMENT);// 1 结束解析
(XmlPullParser.START_TAG);//2 开始该标签的解析
(XmlPullParser.END_TAG);// 3 结束该标签
1、标签不带属性
<?xml version="1.0" encoding="UTF-8"?>
<class>
<student>
<id>1</id>
<name>tom</name>
<age>20</age>
</student>
<student>
<id>2</id>
<name>jack</name>
<age>21</age>
</student>
<student>
<id>3</id>
<name>rose</name>
<age>22</age></student>
</class>
Student类
解析类
public class Demo01 {
public static void main(String[] args) {
System.out.println(getData());
}
// 解析xml使用集合存储
public static List<Student> getData() {
List<Student> list = null;
Student stu = null;
try {
// 创建pull解析器工厂
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
// 创建pull解析器
XmlPullParser parser = factory.newPullParser();
// 指定解析的文件
parser.setInput(new FileReader("student01.xml"));
// pull解析的事件常量
// System.out.println(XmlPullParser.START_DOCUMENT);// 0
// System.out.println(XmlPullParser.END_DOCUMENT);// 1
// System.out.println(XmlPullParser.START_TAG);// 2
// System.out.println(XmlPullParser.END_TAG);// 3
// System.out.println(XmlPullParser.TEXT);// 4
// 获得事件类型
int type = parser.getEventType();
// 直到解析的事件为END_DOCUMENT,表示文档解析结束
while (type != XmlPullParser.END_DOCUMENT) {// 1
// 获得标签名
String tag = parser.getName();
switch (type) {
case XmlPullParser.START_DOCUMENT:// 0
// 表示文档开始,创建集合
list = new ArrayList<>();
break;
case XmlPullParser.START_TAG:// 2
// 判断标签名
if ("student".equals(tag)) {
stu = new Student();
}
if ("id".equals(tag)) {
// 获得标签之间的值
String value = parser.nextText();
stu.setId(Integer.parseInt(value));
}
if ("name".equals(tag)) {
stu.setName(parser.nextText());
}
if ("age".equals(tag)) {
stu.setAge(Integer.parseInt(parser.nextText()));
}
break;
case XmlPullParser.END_TAG:// 3
// 判断结束标签为student
if ("student".equals(tag)) {
list.add(stu);
}
break;
}
// 继续判断下一个事件类型******
// ******
type = parser.next();
}
} catch (XmlPullParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return list;
}
}
2、标签带属性
解析类代码
public class Demo03 {
public static void main(String[] args) {
System.out.println(getData());
}
// 解析xml使用集合存储
public static List<Student> getData() {
List<Student> list = null;
Student stu = null;
try {
// 创建pull解析器工厂
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
// 创建pull解析器
XmlPullParser parser = factory.newPullParser();
// 指定解析的文件
parser.setInput(new FileReader("student02.xml"));
// 获得事件类型
int type = parser.getEventType();
// 直到解析的事件为END_DOCUMENT,表示文档解析结束
while (type != XmlPullParser.END_DOCUMENT) {// 1
// 获得标签名
String tag = parser.getName();
switch (type) {
case XmlPullParser.START_DOCUMENT:// 0
// 表示文档开始,创建集合
list = new ArrayList<>();
break;
case XmlPullParser.START_TAG:// 2
// 判断标签名
if ("student".equals(tag)) {
stu = new Student();
// 获得student标签的属性
// 获得属性个数
int n = parser.getAttributeCount();
for (int i = 0; i < n; i++) {
// 获得属性名和属性值
String name = parser.getAttributeName(i);
String value = parser.getAttributeValue(i);
if ("id".equals(name))
stu.setId(Integer.parseInt(value));
}
}
if ("name".equals(tag)) {
stu.setName(parser.nextText());
}
if ("age".equals(tag)) {
stu.setAge(Integer.parseInt(parser.nextText()));
}
break;
case XmlPullParser.END_TAG:// 3
// 判断结束标签为student
if ("student".equals(tag)) {
list.add(stu);
}
break;
}
// 继续判断下一个事件类型******
// ******
type = parser.next();
}
} catch (XmlPullParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return list;
}
}