黑马程序员技术交流社区
标题:
pull 解析
[打印本页]
作者:
hejinzhong
时间:
2014-9-25 22:36
标题:
pull 解析
本帖最后由 hejinzhong 于 2014-9-25 22:41 编辑
public class NewsParseService {
// 利用pull解析xml文件的工具类
public static List<NewsItem> parseNewsItem(InputStream in) {
try {
// 用来存每个条目和存所有条目的容器
NewsItem item = null;
List<NewsItem> list = null;
// 得到解析器
XmlPullParser parser = Xml.newPullParser();
parser.setInput(in, "UTF-8");
//得到解析事件类型
int event = parser.getEventType();
// 只要没有解析到结尾,就继续循环
while (event != XmlPullParser.END_DOCUMENT) {
// 获得节点名字
String nodeName = parser.getName();
//根据解析节点类型,进行相应处理
switch (event) {
//根节点的开始,则建立一个List集合
case XmlPullParser.START_DOCUMENT:
list = new ArrayList<NewsItem>();
break;
// 开始一个标签
case XmlPullParser.START_TAG:
// 根据名字的不同,进行不同的封装
if ("item".equals(nodeName)) {
item = new NewsItem();
}
if ("title".equals(nodeName)) {
item.setTitle(parser.nextText());
}
if ("description".equals(nodeName)) {
item.setDescription(parser.nextText());
}
if ("image".equals(nodeName)) {
item.setImage(parser.nextText());
}
if ("type".equals(nodeName)) {
item.setType(Integer.parseInt(parser.nextText()));
}
if ("comment".equals(nodeName)) {
item.setComment(Integer.parseInt(parser.nextText()));
}
break;
// 当解析玩一条,则添加到list中
case XmlPullParser.END_TAG:
if ("item".equals(nodeName)) {
list.add(item);
}
break;
}
// 记得每次循环完毕,将事件指向下一个
event = parser.next();
}
return list;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2