android使用XmlPullParser来解析XML文件
解析下面的一个XML:
<?xml version="1.0" encoding="utf-8" ?>
<rss><sid>77f265bb46de068e78f35afbadec62af</sid><count>3</count><control>0</control>
<mblog><uid>1195224593</uid><favid>3436952795</favid><mblogid>5xtaJR</mblogid><mblogidnum>3436952795</mblogidnum><mblogtype>0</mblogtype><mlevel>0</mlevel><feedid>5xtaJR</feedid><nick>马艳丽</nick><portrait>http://tp2.sinaimg.cn/1195224593/50/5614100014/0</portrait><vip>1</vip><vipsubtype>0</vipsubtype><member_type>13</member_type><remark></remark><level>2</level><rtnum>11</rtnum><commentnum>25</commentnum><attitudenum>0</attitudenum><attitudeid>0</attitudeid><attitudes_status>0</attitudes_status><attitudes_count>0</attitudes_count><mblogtypename></mblogtypename><visible><type>0</type><list_id>0</list_id></visible><content>婚礼在北海漂亮的北海公园举行…好美好浪漫的地方… </content><pic>http://ss12.sinaimg.cn/wap240/473dae11494344debfc5b</pic><time>1288852274</time><source>彩信</source></mblog></rss>
这样来写解析:
public static Object[] getMBlogList(String content) throws HttpException {
try {
Object[] result = new Object[3];
List<MBlog> lst = new ArrayList<MBlog>();
result[1] = lst; final XmlPullParser parser = Xml.newPullParser();
parser.setInput(new StringReader(content));
int type;
while ((type = parser.next()) != XmlPullParser.END_DOCUMENT) {
switch (type) {
<strong>case XmlPullParser.START_TAG:这里開始读取最外层的标签属性</strong>
if (parser.getName().equals("count")) {
try {
result[0] = new Integer(parseText(parser));
} catch (Exception e) {
result[0] = 0;
}
} else if (parser.getName().equals("mblog")) {
MBlog mb = parseMBlog(parser);
if (mb != null)
lst.add(mb);
} else if (parser.getName().equals("relation")) {
result[2] = new Integer(parseText(parser));
}
break;
default:
break;
}
}
return result;
} catch (NumberFormatException e) {
throw new HttpException(e);
} catch (XmlPullParserException e) {
throw new HttpException(e);
} catch (IOException e) {
throw new HttpException(e);
} catch (ParseException e) {
throw new HttpException(e);
}
} private static String parseText(XmlPullParser parser) throws ParseException {
try {
int type = parser.next();
if (type == XmlPullParser.TEXT) {
return replaceEntityRef(parser.getText().trim());
} else {
return "";
}
} catch (Exception e) {
throw new ParseException(PARSE_ERROR, e);
}
} public static MBlog parseMBlog(XmlPullParser parser) throws ParseException {
<strong>MBlog b = new MBlog();//这里開始读取每一个MBlog对象</strong>
try {
int type;
LOOP: {
while ((type = parser.next()) != XmlPullParser.END_DOCUMENT) {
switch (type) {
case XmlPullParser.START_TAG:
if (parser.getName().equals("uid")) {
b.uid = parseText(parser);
if (b.uid.equals(""))
return null;
} else if (parser.getName().equals("favid")) {
b.favid = parseText(parser);
} else if (parser.getName().equals("mblogid")) {
b.mblogid = parseText(parser);
} else if (parser.getName().equals("nick")) {
String s = parseText(parser);
b.nick = s;
} else if (parser.getName().equals("portrait")) {
b.portrait = parseText(parser);
} else if (parser.getName().equals("vip")) {
b.vip = (parseText(parser).equals("1")) ? true : false;
} else if (parser.getName().equals("content")) {
b.content = parseText(parser);
} else if (parser.getName().equals("rtrootuid")) {
b.rtrootuid = parseText(parser);
} else if (parser.getName().equals("rtrootid")) {
b.rtrootid = parseText(parser);
} else if (parser.getName().equals("rtrootnick")) {
String s = parseText(parser);
b.rtrootnick = s;
} else if (parser.getName().equals("rtrootvip")) {
b.rtrootvip = (parseText(parser).equals("1")) ? true : false;
} else if (parser.getName().equals("rtreason")) {
b.rtreason = parseText(parser);
} else if (parser.getName().equals("rtnum")) {
b.rtnum = Integer.parseInt(parseText(parser));
} else if (parser.getName().equals("commentnum")) {
b.commentnum = Integer.parseInt(parseText(parser));
} else if (parser.getName().equals("time")) {
b.time = new Date(Long.parseLong(parseText(parser)) * 1000);
} else if (parser.getName().equals("pic")) {
b.pic = parseText(parser);
} else if (parser.getName().equals("source")) {
b.src = parseText(parser);
} else if (parser.getName().equals("longitude")) {
b.longitude = parseText(parser);
} else if (parser.getName().equals("latitude")) {
b.latitude = parseText(parser);
}
break;
case XmlPullParser.END_TAG:
if (parser.getName().equals("mblog")) {
break LOOP;
}
break;
default:
break;
}
}
}
return b;
} catch (Exception e) {
throw new ParseException(PARSE_ERROR, e);
}
}
在Activity中这样调用:
public void parseAssertData() {
InputStream is = null;
try {
is = this.getAssets().open("11.xml", Context.MODE_PRIVATE);
int length = is.available();
byte[] buffer = new byte[length];
is.read(buffer);
String temp = new String(buffer); try {
Object[] array = ParseData.getMBlogList(temp);
} catch (HttpException e) {
e.printStackTrace();
} } catch (IOException ex) {
ex.printStackTrace();
}
}
android使用XmlPullParser来解析XML文件的更多相关文章
- android 生成、pull解析xml文件
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools= ...
- Android开发学习---使用XmlPullParser解析xml文件
Android中解析XML的方式主要有三种:sax,dom和pull关于其内容可参考:http://blog.csdn.net/liuhe688/article/details/6415593 本文将 ...
- Android 解析XML文件和生成XML文件
解析XML文件 public static void initXML(Context context) { //can't create in /data/media/0 because permis ...
- 【Android学习笔记】XmlResourceParser解析xml文件
最近学习Android时,需要用到解析XML文件里的数据,可以用XmlResourceParser来解析xml文件,正好将此记录下来. XmlResourceParser里常用的字段和方法 首先先给出 ...
- Android pull解析xml文件
本文介绍android中使用pull来解析xml文件 先自己写一个xml文件,存一些天气信息 <?xml version="1.0" encoding="UTF-8 ...
- android——使用pull解析xml文件
1.persons.xml 将persons.xml文件放到src目录下.其代码如下: <?xml version='1.0' encoding='UTF-8' standalone='yes' ...
- [android] 采用pull解析xml文件
/***********2016年5月6日 更新**********************/ 知乎:Android 中有哪几种解析 xml 的类,官方推荐哪种 ? 以及它们的原理和区别? 刘吉财: ...
- Android解析XML文件
XML文件和获取XML值 XML文件样例 <?xml version="1.0" encoding="utf-8"?> <citys> ...
- 【Android】使用Pull生成/解析XML文件
一.生成XML文件,即是将对象集合转为XML文件存储. 对象集合 –> XML(序列化) Android中使用android.util.Xml类对其进行了描述,提供相应的API. 步骤大致如下: ...
随机推荐
- WPF案例 (五) 对控件界面使用倒影
原文:WPF案例 (五) 对控件界面使用倒影 在这个程序里对5个2D控件界面应用了垂直倒影,边缘模糊化和模型变换,在本例中,这5个2D控件为Border, 各包含了一幅Image,界面如下图所示,源码 ...
- HDU 4916 树分治
Mart Master II Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) ...
- SE 2014年5月23日
两站点 A 和 B,由于业务往来需要,所以工程师提出vpn技术,同时需要保证业务流在internet上的安全性,同时在这里站点均为固定ip地址. 通过分析以上信息,确定这里使用 IPSec VPN的主 ...
- STP学习总结
STP学习总结 STP是广泛应用在二层的具有冗余的网络中用来消除环路的一种机制,当然二层环网中用来消除环路的技术还有RRPP和H3C的smart-link技术等. 一.STP的一些基本概念 STP是I ...
- 前端编程提高之旅(六)----backbone实现todoMVC
乐帝当年学习backbone时.最開始是看官网todoMVC的实现.后来了解到requireJS便于管理JS代码.就对官网代码做了requireJS管理.但此时乐帝感觉此时的t ...
- Hadoop单机版安装,配置,运行
Hadoop是最近非常流行的东东啦,但是乍一看都觉得是集群的东东,其实在单机版上安装Hadoop也是可以的,并且安装好以后可以很方便的进行程序的调试,调试好程序以后再丢到集群中,放心的算吧,呵呵.. ...
- pygame系列_游戏中的事件
先看一下我做的demo: 当玩家按下键盘上的:上,下,左,右键的时候,后台会打印出玩家所按键的数字值,而图形会随之移动 这是客观上面存在的现象. 那么啥是事件呢? 你叫我做出定义,我不知道,我只能举个 ...
- Windows phone 8 学习笔记(3) 通信
原文:Windows phone 8 学习笔记(3) 通信 Windows phone 8 可利用的数据通信方式比较广泛,在硬件支持的前提下,我们可以利用WiFi.蓝牙.临近感应等多种方式.数据交互一 ...
- Allegro绘制PCB流程
单位换算 1mil = 0.0254 mm 1mm = 39.3701 mil 默认情况下我们更倾向于使用mil单位绘制PCB板. 1 新建工程,File --> New... --> [ ...
- Android实现隐藏状态栏和标题栏
隐藏标题栏需要使用预定义样式:android:theme=”@android:style/Theme.NoTitleBar”. 隐藏状态栏:android:theme=”@android:style/ ...