[android]解析XML文件的方法有三种:PULL,DOM,SAM

PULL 的工作原理:

XML pull提供了开始元素和结束元素。当某个元素开始时,可以调用parser.nextText从XML文档中提取所有字符数据。当解析到一个文档结束时,自动生成EndDocument事件。

常用的XML pull的接口和类:

XmlPullParser:该解析器是一个在org.xmlpull.v1中定义的解析功能的接口。

XmlSerializer:它是一个接口,定义了XML信息集的序列。

XmlPullParserFactory:这个类用于在XMPULL V1 API中创建XML Pull解析器。

XmlPullParserException:抛出单一的XML pull解析器相关的错误。

PULL解析器的运行方式和SAX类似,都是基于事件的模式。

不同的是,在PULL解析过程中返回的是数字,且我们需要自己获取产生的事件然后做相应的操作,而不像SAX那样由处理器触发一种事件的方法,执行我们的代码:

读取到xml的声明返回 START_DOCUMENT; 结束返回 END_DOCUMENT ; 开始标签返回 START_TAG;

结束标签返回 END_TAG; 文本返回 TEXT。

代码如下

public List<Blog> parse(InputStream is) throws Exception {

List<Blog> blogList = null;
Blog blog = null;

//由android.util.Xml创建一个XmlPullParser实例
XmlPullParser parser = Xml.newPullParser();

//设置输入流并指明编码方式
parser.setInput(is, "UTF-8");

//产生第一个事件
int eventType = parser.getEventType();

while (eventType != XmlPullParser.END_DOCUMENT){

switch (eventType) {
//判断当前是否为文档开始事件

case XmlPullParser.START_DOCUMENT:
//初始化Blog集合
blogList = new ArrayList<Blog>();
break;

//判断当前事件是否为标签元素开始事件
case XmlPullParser.START_TAG:

if (parser.getName().equals("blog")){

//判断开始标签元素是否为Blog
blog = new Blog();

} else if (parser.getName().equals("blogTitle")){

eventType = parser.next();
//得到Blog标签的属性值,并设置Tile
blog.setBlogTile(parser.getText());
} else if (parser.getName().equals("blogText")) {

eventType = parser.next();

//得到Blog标签的属性值,并设置Text
blog.setBlogText(parser.getText());

}
break;

//判断当前事件是否为标签元素结束事件
case XmlPullParser.END_TAG:
//判断标签元素是否为blog
if(parser.getName().equals("blog")){
//将blog添加到blogList集合中
blogList.add(blog);
blog = null;

}
break;
}
//进入下一个元素并触发事件
eventType = parser.next();


}
return blogList;
}

原文地址:https://www.cnblogs.com/julyme/p/4198602.html