Android已经集成进了Pull解析器,所以无需添加任何jar文件。android系统本身使用到的各种xml文件,其内部也是采用Pull解析器进行解析的。 Pull解析器的运行方式与 SAX 解析器相似。它提供了类似的事件,如:开始元素和结束元素事件,使用parser.next()可以进入下一个元素并触发相应事件。跟SAX不同的是, Pull解析器产生的事件是一个数字,而非方法,因此可以使用一个switch对感兴趣的事件进行处理。当元素开始解析时,调用parser.nextText()方法可以获取下一个Text类型节点的值。
pull解析xml步骤主要如下:
假设解析下列xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<persons>
<person id=“18">
<name>allen</name>
<age>36</age>
</person>
<person id=“28">
<name>james</name>
<age>25</age>
</person>
</persons>
(1)获得pull解析器对象
XmlPullParser parser = Xml.newPullParser();
(2)指定解析的文件和编码格式
parser.setInput(fis, "utf-8");
(3)获得事件类型(获得各标签类型)
int eventType = parser.getEventType();
(4)根据各标签信息进行必要数据的读取
while(eventType != XmlPullParser.END_DOCUMENT) {
//没有到结束标签
String tagName = parser.getName(); // 获得当前节点的名称
switch (eventType) {
case XmlPullParser.START_TAG: // 当前等于开始节点<person>
if("persons".equals(tagName)) { // <persons>
//相关操作
} else if("person".equals(tagName)) { // <person id="1">
//相关操作
} else if("name".equals(tagName)) { // <name>
person.setName(parser.nextText());
} else if("age".equals(tagName)) { // <age>
//相关操作
}
break;
case XmlPullParser.END_TAG: //读取结束 </persons>
if("persons".equals(tagName)) {
//相关操作
}
break;
default:
break;
}
eventType = parser.next();// 下一个
}