Pull解析是Android中解析XMl文件的方法。他集合Dom解析以及Sax解析的优点,既可以控制何时循环结束,也不会占用很大的内存。
下面是Pull解析的简单使用:
package com.example.internetdemo;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
public class PullParserDemo {
public static void pullParse(InputStream in) throws XmlPullParserException, IOException {
XmlPullParserFactory xpf = XmlPullParserFactory.newInstance();
XmlPullParser parser = xpf.newPullParser();
parser.setInput(in,"UTF-8");//xml的编码集,一般为UTF-8
ArrayList<Person> persons = null;
//type-->读取到的内容的状态:开始文档、开始标签等
int type = parser.getEventType();
//开始文档:XmlPullParser.START_DOCUMENT
//开始标签:XmlPullParser.START_TAG
//结束标签:XmlPullParser.EDN_TAG
//结束文档:XmlPullParser.END_DOCUMENT
//文本内容:通过标签头之后获取
Person p = null;
while (type!=XmlPullParser.END_DOCUMENT) {//结束文档的时候结束循环
switch (type) {
case XmlPullParser.START_DOCUMENT:
//创建存放xml文件属性的集合
persons = new ArrayList<Person>();
break;
case XmlPullParser.START_TAG:
//获取标签名
String tagName = parser.getName();
//新建person对象
p = new Person();
if ("person".equals(tagName)&&parser.getAttributeCount()==1/*属性为1*/) {
//设置id
p.setId(parser.getAttributeValue(0));
}else if ("name".equals(tagName)) {
//设置name
p.setName(parser.nextText()/*起始标签和结束标签之间的字符串*/);
}else if ("age".equals(tagName)) {
//设置age
p.setAge(parser.nextText());
}
break;
case XmlPullParser.END_TAG:
String endTagName = parser.getName();
if ("person".equals(endTagName)) {
//如果对象不为空,将其添加到集合中,并将其置空
if (p != null) {
persons.add(p);
p = null;
}
}
break;
}
//进入下一个状态
type = parser.next();
}
}
}