Android中,解析Xml数据的三种方式:
1、DOM(org.w3c.dom)
“文档对象模型”方式,解析完的Xml将生成一个树状结构的对象。
2、SAX(org.xml.sax)
Simple API for XML,以事件的形式通知程序,对Xml进行解析。
3、XMLPULL(org.xmlpull.v1)
类似于SAX方式,程序以“拉取”的方式对Xml进行解析。
public class MainActivity extends Activity {
@Override
protected void onCreate(BundlesavedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getappInfo();//从asstes文件夹下读取并解析app.xml文件,结果保存在集合中
}
private void getappInfo() {
new Thread(){
ArrayList<AppBean> apps;//保存解析结果的集合
public void run() {
try {
InputStream in = getAssets().open("app.xml");
XmlPullParser parser =XmlPullParserFactory.newInstance().newPullParser();
parser.setInput(in, "utf-8");//设置编码格式
AppBean app=null;
for(int eventType=XmlPullParser.START_DOCUMENT;eventType!=XmlPullParser.END_DOCUMENT;eventType=parser.next()){
switch (eventType) {
case XmlPullParser.START_DOCUMENT://文档开始处,初始化集合
apps=newArrayList<AppBean>();
break;
case XmlPullParser.START_TAG:
String element=parser.getName();
if("app".equals(element)){
app=new AppBean();//app标签开始处,初始化app
//获取name、version和fileSize三个属性值
app.setName(parser.getAttributeValue(null, "name"));
app.setVersion(parser.getAttributeValue(null, "version"));
app.setFileSize(Integer.parseInt(parser.getAttributeValue(null, "fileSize")));
}else if("thumb".equals(element)){//获取thumb标签值
app.setThumb(parser.nextText());
}else if("apk".equals(element)){//获取apk标签值
app.setApk(parser.nextText());
}else if("intro".equals(element)){//获取intro标签值
app.setIntro(parser.nextText());
}
break;
case XmlPullParser.END_TAG:
if("app".equals(parser.getName())){//app标签结束处,将app添加至集合
apps.add(app);
}
break;
}
}
for(AppBeanappBean:apps){//遍历集合,在日志中显示集合元素值
Log.i("main",appBean.toString());
}
} catch (IOException e) {
// TODO Auto-generatedcatch block
e.printStackTrace();
} catch (XmlPullParserException e) {
// TODO Auto-generatedcatch block
e.printStackTrace();
}
};
}.start();
}
}
android SDK提供了xmlpull api,xmlpull和sax类似,是基于流(stream)操作文件,然后根据节点事件回调开发者编写的处理程序.因为是基于流的处理,因此xmlpull和sax都比较节约内存资源,不会象dom那样要把所有节点以对橡树的形式展现在内存中.xmlpull比sax更简明,而且不需要扫描完整个流.
是一种基于流形式来操作文件,并且会根据节点来回调程序这样就比较节约资源,不需要扫描整个流
<?xml version="1.0" encoding="utf-8"?>
<apps>
<app name="腾讯手机管家" version="4.6.0"fileSize="10464">
<thumb>/thumb/tencent_safe.png</thumb>
<apk>/apk/tencent_safe.apk</apk>
<intro>腾讯手机管家是一款完全免费的手机安全管理软件,以手机安全管理软件先锋为使命,提供体验加速、健康优化、安全防护、软件管理等职能话的手机管理功能。
</intro>
</app>
<app name="百度手机卫士" version="4.2.0"fileSize="8847">
<thumb>/thumb/baidu_safe.png</thumb>
<apk>/apk/baidu_safe.apk</apk>
<intro>六亿人用百度,更信赖百度手机卫士。提供超强贴心的安全服务,更快更安心!\n防吸费、防骚扰、百度查杀、手机加速、垃圾清理、应用管理......,功能全面!\n收流量助手:狂省上网流量;\n防骚扰:远离骚扰电话、垃圾短信;\n防吸费:杜绝流量偷跑、话费暗扣;\n防诈骗:拦截诈骗短信电话,避免财产损失;\n病毒查杀:专业强力杀毒,查杀率全球评测第一;\n手机加速:智能加速,手机不在卡顿;\n垃圾清理:强力清理,手机空间更足;\n应用管理:轻松卸载、升级、搜索应用。</intro>
</app>
<app name="金山毒霸" version="3.3.1"fileSize="8581">
<thumb>/thumb/kingsoft_safe.png</thumb>
<apk>/apk/kingsoft_safe.apk</apk>
<intro>安卓手机太费电了?掉电快、司机、手机发烫、卡慢,称为用户心中永远的痛。\n现在拿起手机,安装金山手机毒霸3.0版,体验全新的超级盛典功能,可让手机待机一天遍两天。</intro>
</app>
<app name="安医生" version="3.1.1"fileSize="7526">
<thumb>/thumb/an_doctor.png</thumb>
<apk>/apk/an_doctor.apk</apk>
<intro>安医生3.0系列版本重装上阵!新添快捷界面,常用功能一键通;随心换背景,既能高帅富,也能小清新;全面支持安卓4.3,再新的手机,也挡不住安医生奔腾的心!</intro>
</app>
<app name="瑞星手机安全软件" version="3.22.0"fileSize="4567">
<thumb>/thumb/ruixing_safe.png</thumb>
<apk>/apk/ruixing_safe.apk</apk>
<intro>瑞星手机安全软件是一款完全免费的手机杀毒和安全防护软件,提供了查杀病毒、隐私保护、防骚扰、号码查询和手机优化五大功能。</intro>
</app>
<app name="网秦安全" version="3.22.0"fileSize="7096">
<thumb>/thumb/wangqin_safe.png</thumb>
<apk>/apk/wangqin_safe.apk</apk>
<intro>网秦手机安全软件是一款完全免费的手机杀毒和安全防护软件,提供了查杀病毒、隐私保护、防骚扰、号码查询和手机优化五大功能。</intro>
</app>
<app name="防盗卫士" version="1.1.1"fileSize="696">
<thumb>/thumb/lost_safe.png</thumb>
<apk>/apk/lost_safe.apk</apk>
<intro>防盗卫士是一款基于GPS、网络进行定位的手机防盗应用。当用户的手机被盗、丢失时,可以通过该应用返回当前手机位置,以方便失主尽快找到被盗手机。具有智能激活、人工激活、实时跟踪、设置简单的特点。</intro>
</app>
<app name="大蜘蛛反病毒" version="8.0.0"fileSize="3768">
<thumb>/thumb/bigspider_safe.png</thumb>
<apk>/apk/bigspider_safe.apk</apk>
<intro>大蜘蛛反病毒软件在国际上享有盛誉,以独一无二的非特征风险程序运算法则而著称的顶级安全软件,更是唯一获得俄罗斯联邦国防部许可证的安全品牌。</intro>
</app>
<app name="AVG" version="10.1.5"fileSize="10393">
<thumb>/thumb/avg_safe.png</thumb>
<apk>/apk/avg_safe.apk</apk>
<intro>AVG是能够让你的智能手机面授恶意软件、手机病毒和垃圾爹娘的侵袭。</intro>
</app>
<app name="LBE安全大师" version="5.1.5"fileSize="5529">
<thumb>/thumb/lbe_safe.png</thumb>
<apk>/apk/lbe_safe.apk</apk>
<intro>LBE安全大师业界首创面ROOT,无需ROOT也能获取系统权限,完美支持Android4.3系统。\nNFC解锁:利用NFC轻松触碰完美解锁。</intro>
</app>
<app name="摩安卫士" version="8.4.0"fileSize="6737">
<name>摩安卫士</name>
<version>8.4.0</version>
<thumb>/thumb/mobile_an_safe.png</thumb>
<apk>/apk/mobile_an_safe.apk</apk>
<fileSize>6737</fileSize>
<intro>清新风格操作界面,简单易懂,方便快捷,带给您不一样的操作体验。</intro>
</app>
</apps>