大家好,又见面了,我是你们的朋友全栈君。
PULL解析技术案例
关于Android的pull解析技术详解
对于一个很少写作的人来说,写一篇博客还算比较困难的,但是面对困难岂有退缩之理,好了废话说完了,开始进入正题。
对于Android来说pull解析xml类型的文件应该是非常简单的,
当然这是pull解析本身特性所决定的,那么接下来就跟随我的脚步来 看一看pull解析的小巧之处吧。
习到pull解析技术,因为本api接口中的内容全部都是以xml解析的形式暴露 给大家的,该api中的一个国内新闻接口:
请点击文字进行跳转。
<rss version="2.0">
<channel>
<title>新闻国内</title>
<image>
<title>新闻国内</title>
<link>http://news.qq.com</link>
<url>http://mat1.qq.com/news/rss/logo_news.gif</url>
</image>
<description>新闻国内</description>
<link>http://news.qq.com/china_index.shtml</link>
<copyright>Copyright 1998 - 2005 TENCENT Inc. All Rights Reserved</copyright>
<language>zh-cn</language>
<generator>www.qq.com</generator>
<item>
<title>广西律师“半裸”和法院说法不一 要求公布监控</title>
<link>http://news.qq.com/a/20160604/030486.htm</link>
<author>www.qq.com</author>
<category/>
<pubDate>2016-06-04 19:05:45</pubDate>
<comments/>
<description> 广西律师吴良述为其代理的一起民事纠纷案到南宁市青秀区法院立案,出门时已呈“半裸”状。本文图片均来自财新网 6月3日,广西律师吴良述为其代理的一起民事纠纷案到南宁市青秀区法院立案,出门时已呈“半裸”状,一条裤腿被撕开,衬衫也敞着怀。他称,因拒绝法警强行检查其随身物品遭殴打,衣服被撕烂。 事发后</description>
</item>
<item>
<title>留德遇害女生将被接回河南老家:期盼一个交代</title>
<link>http://news.qq.com/a/20160604/030317.htm</link>
<author>www.qq.com</author>
<category/>
<pubDate>2016-06-04 18:57:47</pubDate>
<comments/>
<description>中国姑娘李洋洁生前照片。新华网6月4日消息,如果一切顺利,今年7月,中国姑娘李洋洁就该从德国安哈尔特应用技术大学毕业。成为一名建筑设计师是她的理想,但这个理想如今已没有实现的可能:5月11日晚,李洋洁外出跑步后再也没能回来,一起暴力犯罪夺走了她年轻的生命。“单纯”、“认真”、“充满正能量”……这是与李洋</description>
</item>
根据这段xml文件不知道大家发现没有,如果我只想提取<item>
元素中的内容那么前面有一大部分是不需要解析出来的因此这就体现了pull解析的小巧之处,固然没有JSON解析那么方便,但是xml的普遍性还是大家有目共睹的吧。接下来就到了代码时刻,我会详细讲解为何要这么做。Let`s go.
public class ParseUtils {
public static List<channel> Parse(String values) {
List<channel> news = null;
channel content = null;
try {
XmlPullParserFactory xmlPullParserFactory = XmlPullParserFactory.newInstance();
XmlPullParser parser = xmlPullParserFactory.newPullParser();
String iso_8859_1 = new String(values.getBytes("ISO_8859_1"), "UTF-8");
parser.setInput(new StringReader(iso_8859_1));
int eventType = parser.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
String name = parser.getName();
switch (eventType) {
case XmlPullParser.START_DOCUMENT:
news = new ArrayList<channel>();
break;
case XmlPullParser.START_TAG:
if (("item").equals(name)) {
content = new channel();
}
else if ("title".equals(name)) {
if (content != null) {
content.setTitle(parser.nextText());
}
} else if ("link".equals(name)) {
if (content != null) {
content.setLink(parser.nextText());
}
} else if ("description".equals(name)) {
if (content != null) {
content.setDescription(parser.nextText());
}
} else if ("pubDate".equals(name)) {
if (content != null) {
content.setPubDate(parser.nextText());
}
}
break;
case XmlPullParser.END_TAG:
if (("item").equals(name)) {
news.add(content);
// newspager = null;
}
break;
}
eventType = parser.next();
}
return news;
} catch (Exception e) {
e.printStackTrace();
news.size()+"");
}
return null;
}
}
首先我们需要建立一个XmlPullParserFactory工程,获取其实例NewInstance 。通过setinput来写入需要解析的数据。setinput 支持字节流和Reader类型字符串,这个要根据个人选择,在这里我选择了StringReader来进行-可以看到在我加入解析前,我进行了一些字符串转码,应对一些乱码问题。接下来就要详细介绍一些xml结构的介绍。
首先介绍xml如何进行相应的判断
- XmlPullParser.END_DOCUMENT
这个参数是判断一个xml最大范围。这个属性的作用是判断整个xml文件的开始和结束,可以说这个参数是我们小区的门卫,要想进小区呢!就先得经过门卫保安的同意,同样离开也一样需要去登记离开。 - XmlPullParser.START_TAG
这个参数是判断一个子范围所包含内容的开始。就好像每个小区中的每个小家一样,我想了解小区某个人家中的各个房间布局一样,我们需要先开门,因此这就是那个户的门。 - XmlPullParser.END_TAG
这个参数是判断刚才提及的子范围中结束的标志,这里我们可以进行一些操作,打个比方就是将每户家中的布局进行记录,并汇总给装修公司。装修公司可以提取每个用户的数据。
看到这里大家应该对pull解析有一定理解了吧。
接下来大家就要动手进行操作了,毕竟说的不不如动手学习多。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/162764.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...