歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

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. }  
Copyright © Linux教程網 All Rights Reserved