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. 步骤大致如下: ...
随机推荐
- ABP中动态WebAPI原理解析
ABP中动态WebAPI原理解析 动态WebAPI应该算是ABP中最Magic的功能之一了吧.开发人员无须定义继承自ApiController的类,只须重用Application Service中的类 ...
- poj3974(manacher)
传送门:Palindrome 题意:给定一个字符串,求最长回文子串. 分析:manach裸题,核心理解mx>i?p[i]=min(p[2*id-i],mx-i):1. #pragma comme ...
- hdu1260(dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1260 分析:简单dp,dp[i]=min(dp[i-1]+a[i],dp[i-2]); #includ ...
- 【网络协议】TCP交互数据流和数据流成块
前言 建立在TCP协议上的应用层协议有非常多,如FTP.HTTP.Telnet等,这些协议依据数据传输的多少能够分为两类:交互数据类型和成块数据类型. 交互数据类型,如:Telnet,这类协议一般仅仅 ...
- HDU 3304 Interesting Yang Yui Triangle lucas定理
输入p n 求杨辉三角的第n+1行不能被p整除的数有多少个 Lucas定理: A.B是非负整数,p是质数.AB写成p进制:A=a[n]a[n-1]...a[0],B=b[n]b[n-1]...b[0] ...
- 在maven仓库中查找jar
findmaven.net是一个查找Jar和查找Maven的Maven仓库搜索引擎,它能够依据Java开发人员提供的Class名或者Jar名找到包括它的Jar.同一时候提供Jar的Maven仓库链接. ...
- php如何判断用户是从指定页面跳转进来的
$_SERVER['HTTP_REFERER']下'HTTP_REFERER' 引导用户代理到当前页的前一页的地址(如果存在).由 user agent 设置决定.并不是所有的用户代理都会设置该项,有 ...
- python开发_tkinter_小球完全弹性碰撞游戏
python开发_tkinter_小球完全弹性碰撞游戏 完成这个小球的完全弹性碰撞游戏灵感来自于: 下面是我花了一周下班时间所编写的一个小球完全弹性碰撞游戏: 游戏初始化状态: 最下面的游标和修改 ...
- VMware虚拟机上网络连接(network type)的三种模式--bridged、host-only、NAT
VMware虚拟机上网络连接(network type)的三种模式--bridged.host-only.NAT VMWare提供了三种工作模式,它们是bridged(桥接模式).NAT(网络地址转换 ...
- POJ 2182 Lost Cows(牛排序,线段树)
Language: Default Lost Cows Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9207 Acce ...