Android-XML解析Dom,Sax,Pull


Android平台上解析xml的常见的工具有三种:dom,sax,pull。
第一种是DOM,
它的特点是一次全部加载,如果对于数据量小的情况下,它的效率还可以,如果XML文件很大的情况下,速度就会慢起来。
第二种方式SAX:
SAX是基于事件驱动的。当然android的事件机制是基于回调函数的,在用SAX解析xml文档时候,在读取到文档开始和结束标签时候就会回调一个事件,在读取到其他节点与内容时候也会回调一个事件。
第三种方式PULL:
这种方式也是基于事件驱动 的,与SAX方式一样,只不过PULL方式读xml回调方法返回的是数字。
下面分别使用它们解析xml文件。
在assert下放置persons.xml文件:

  1. <?xml version="1.0" encoding="utf-8"?>    
  2. <persons>    
  3.     <person id="1">    
  4.         <name>张三</name>    
  5.         <age>12</age>       
  6.     </person>    
  7.     <person id="2">    
  8.         <name>李四</name>    
  9.         <age>14</age>       
  10.     </person>    
  11.     <person id="3">    
  12.         <name>王五</name>    
  13.         <age>15</age>       
  14.     </person>    
  15. </persons>    
创建Activity文件准备处理文件并显示:
  1. import java.io.IOException;  
  2. import java.io.InputStream;  
  3. import java.util.ArrayList;  
  4. import java.util.HashMap;  
  5. import java.util.List;  
  6. import java.util.Map;  
  7. import android.app.Activity;  
  8. import android.content.res.AssetManager;  
  9. import android.os.Bundle;  
  10. import android.view.View;  
  11. import android.view.View.OnClickListener;  
  12. import android.widget.Button;  
  13. import android.widget.ListView;  
  14. import android.widget.SimpleAdapter;  
  15.   
  16. public class XMLActivity extends Activity implements  OnClickListener{  
  17.     /** Called when the activity is first created. */  
  18.     private Button  btn_dom;  
  19.     private Button  btn_sax;  
  20.     private Button  btn_pull;  
  21.     private  ListView listview;  
  22.     @Override  
  23.     public void onCreate(Bundle savedInstanceState) {  
  24.         super.onCreate(savedInstanceState);  
  25.         setContentView(R.layout.main);  
  26.         init();  
  27.     }  
  28. private void init(){  
  29.     btn_dom=(Button) findViewById(R.id.dom);  
  30.     btn_sax=(Button) findViewById(R.id.sax);  
  31.     btn_pull =(Button) findViewById(R.id.pull);  
  32.     listview  =(ListView) findViewById(R.id.list);  
  33.     btn_dom.setOnClickListener(this);  
  34.     btn_sax.setOnClickListener(this);  
  35.     btn_pull.setOnClickListener(this);  
  36. }  
  37.     public void onClick(View v) {  
  38.         // TODO Auto-generated method stub   
  39.         int id = v.getId();    
  40.         List<Person> list = null;    
  41.         InputStream is = null;    
  42.         AssetManager manager = getAssets();    
  43.         try    
  44.         {   //读取xml文件。   
  45.             is = manager.open("persons.xml");    
  46.         } catch (IOException e)    
  47.         {    
  48.             e.printStackTrace();    
  49.         }    
  50.         switch (id)    
  51.         {    
  52.         case R.id.dom:  //使用dom解析   
  53.             try    
  54.             {    
  55.                 list = new DomParseService().getPersonsByParseXml(is);    
  56.                 showUI(list);    
  57.             } catch (Exception e)    
  58.             {    
  59.                 e.printStackTrace();    
  60.             }    
  61.             break;    
  62.         case R.id.sax:  //使用sax解析   
  63.             try    
  64.             {    
  65.                 list = new SAXParseService().getPersonsByParseXml(is);    
  66.                 showUI(list);    
  67.             } catch (Exception e)    
  68.             {    
  69.                 e.printStackTrace();    
  70.             }    
  71.             break;    
  72.         case R.id.pull:  //使用pull解析   
  73.             try    
  74.             {    
  75.                 list = new PullParseService().getPersonsByParseXml(is);    
  76.                 showUI(list);    
  77.             } catch (Exception e)    
  78.             {    
  79.                 e.printStackTrace();    
  80.             }    
  81.             break;    
  82.         default:    
  83.             break;    
  84.         }    
  85.         try    
  86.         {    
  87.     
  88.             is.close();    
  89.         } catch (IOException e)    
  90.         {    
  91.             // TODO Auto-generated catch block      
  92.             e.printStackTrace();    
  93.         }    
  94.     }  
  95.      public void showUI(List<Person> list)    
  96.         {    
  97.             List<Map<String, Object>> data = new ArrayList<Map<String, Object>>();    
  98.             for (Person p : list)    
  99.             {    
  100.                 Map<String, Object> map = new HashMap<String, Object>();    
  101.                 map.put("id", p.getId());    
  102.                 map.put("name", p.getName());    
  103.                 map.put("age", p.getAge());    
  104.                 data.add(map);    
  105.             }    
  106.             String[] from =    
  107.             { "id""name""age" };    
  108.             int[] to =    
  109.             { R.id.tv_id, R.id.tv_name, R.id.tv_age };    
  110.             SimpleAdapter adapter = new SimpleAdapter(this, data,    
  111.                     R.layout.person_list_item, from, to);    
  112.            listview.setAdapter(adapter);  
  113.         }    
  114. }  
  • 1
  • 2
  • 下一页

相关内容