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>