首先我们先来了解XmlPullParse代码读取所代表的含义.
读取到xml的声明返回 START_DOCUMENT;
读取到xml的结束返回 END_DOCUMENT ;
读取到xml的开始标签返回 START_TAG
读取到xml的结束标签返回END_TAG
读取到xml的文本返回 TEXT
返回值为int类型,其中他们所代表的值为
int START_DOCUMENT = 0 ; //xml的声明返回,当导航到XmlPullParser.START_DOCUMENT,可以不做处理,当然你可以实例化集合对象等等。
int END_DOCUMENT = 1; //xml的结束返回,
int START_TAG = 2; //开始标签(如果你不懂什么是开始标签,那就百度)
int END_TAG = 3; //结束标签
int TEXT = 4; //文本反悔
获取xml的事件类型为 XmlPullParse.getEventType()
下面讲一个 新闻客户端的事例
XML新闻
<?xml version="1.0" encoding="utf-8"?>
<channel>
<item>
<title>黄兴国最年轻副手被降级 曾是天津最年轻副市长</title>
<image>http://k.sinaimg.cn/n/default/transform/20170710/BOZU-fyhweih2497519.png/w200h134l50t1bf5.jpg</image>
<type>1</type>
<comment>163</comment>
</item>
<item>
<title>丽江遭殴打女游客与6名被告人达和解 撤回诉讼</title>
<image>http://k.sinaimg.cn/n/default/transform/20170710/dcrA-fyhweih2482078.jpg/w200h134l50t1d03.jpg</image>
<type>2</type>
</item>
<item>
<title>这段视频告诉你洪水有多么的吓人,只要几秒钟,可能就会命丧黄泉</title>
<image>http://k.sinaimg.cn/n/default/20170710/kyMF-fyhwret0616031.jpg/w200h134l50t1056.jpg</image>
<type>3</type>
</item>
<item>
<title>黄兴国最年轻副手被降级 曾是天津最年轻副市长</title>
<image>http://k.sinaimg.cn/n/default/transform/20170710/BOZU-fyhweih2497519.png/w200h134l50t1bf5.jpg</image>
<type>4</type>
</item>
<item>
<title>印要在边界打持久战?中方:证明印非法越界有预谋</title>
<image>http://k.sinaimg.cn/n/default/transform/20170710/ZLeO-fyhwehx5509942.jpg/w200h134l50t176b.jpg</image>
<type>5</type>
</item>
<item>
<title>马来西亚铁路订票网站标“中国台湾” 网友:没毛病</title>
<image>http://k.sinaimg.cn/n/default/transform/20170710/y9uN-fyhwefp0466238.png/w200h134l50t1392.jpg</image>
<type>6</type>
<comment>1630</comment>
</item>
</channel>
解析xml
package com.example.news;
import android.util.Xml;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
/**
* Created by Administrator on 2017\7\11 0011.
*/
class XmlParserUtils {
public static List<News> parserXml(InputStream in) throws Exception {
List<News> newsLists = null;
News news = null;
// [1]获取xml的解析器
XmlPullParser parser = Xml.newPullParser();
// [2]设置解析器 要解析的内容
parser.setInput(in, "utf-8");
// [3]获取解析的事件类型
int type = parser.getEventType();
// [4]不停的向下解析
while (type != XmlPullParser.END_DOCUMENT) {
// [5]具体判断一下解析的是开始节点 还是结束节点
switch (type) {
case XmlPullParser.START_TAG: // 解析开始节点
//[6]具体判断一下解析的是哪个开始标签
if("channel".equals(parser.getName())){
//创建一个list集合
newsLists = new ArrayList<News>();
}else if ("item".equals(parser.getName())) {
news = new News();
}else if ("title".equals(parser.getName())) {
news.setTitle(parser.nextText());
}else if ("image".equals(parser.getName())) {
news.setImage(parser.nextText());
}else if ("type".equals(parser.getName())) {
news.setType(parser.nextText());
}else if ("comment".equals(parser.getName())) {
news.setComment(parser.nextText());
}
break;
case XmlPullParser.END_TAG: // 解析结束标签
if ("item".equals(parser.getName())) {
//把javabean添加到 集合
newsLists.add(news);
}
break;
}
// 不停的向下解析
type = parser.next();
}
return newsLists;
}
}