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文件:
- <?xml version="1.0" encoding="utf-8"?>
- <persons>
- <person id="1">
- <name>張三</name>
- <age>12</age>
- </person>
- <person id="2">
- <name>李四</name>
- <age>14</age>
- </person>
- <person id="3">
- <name>王五</name>
- <age>15</age>
- </person>
- </persons>
創建Activity文件准備處理文件並顯示:
- import java.io.IOException;
- import java.io.InputStream;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import android.app.Activity;
- import android.content.res.AssetManager;
- import android.os.Bundle;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.Button;
- import android.widget.ListView;
- import android.widget.SimpleAdapter;
-
- public class XMLActivity extends Activity implements OnClickListener{
- /** Called when the activity is first created. */
- private Button btn_dom;
- private Button btn_sax;
- private Button btn_pull;
- private ListView listview;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- init();
- }
- private void init(){
- btn_dom=(Button) findViewById(R.id.dom);
- btn_sax=(Button) findViewById(R.id.sax);
- btn_pull =(Button) findViewById(R.id.pull);
- listview =(ListView) findViewById(R.id.list);
- btn_dom.setOnClickListener(this);
- btn_sax.setOnClickListener(this);
- btn_pull.setOnClickListener(this);
- }
- public void onClick(View v) {
- // TODO Auto-generated method stub
- int id = v.getId();
- List<Person> list = null;
- InputStream is = null;
- AssetManager manager = getAssets();
- try
- { //讀取xml文件。
- is = manager.open("persons.xml");
- } catch (IOException e)
- {
- e.printStackTrace();
- }
- switch (id)
- {
- case R.id.dom: //使用dom解析
- try
- {
- list = new DomParseService().getPersonsByParseXml(is);
- showUI(list);
- } catch (Exception e)
- {
- e.printStackTrace();
- }
- break;
- case R.id.sax: //使用sax解析
- try
- {
- list = new SAXParseService().getPersonsByParseXml(is);
- showUI(list);
- } catch (Exception e)
- {
- e.printStackTrace();
- }
- break;
- case R.id.pull: //使用pull解析
- try
- {
- list = new PullParseService().getPersonsByParseXml(is);
- showUI(list);
- } catch (Exception e)
- {
- e.printStackTrace();
- }
- break;
- default:
- break;
- }
- try
- {
-
- is.close();
- } catch (IOException e)
- {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- public void showUI(List<Person> list)
- {
- List<Map<String, Object>> data = new ArrayList<Map<String, Object>>();
- for (Person p : list)
- {
- Map<String, Object> map = new HashMap<String, Object>();
- map.put("id", p.getId());
- map.put("name", p.getName());
- map.put("age", p.getAge());
- data.add(map);
- }
- String[] from =
- { "id", "name", "age" };
- int[] to =
- { R.id.tv_id, R.id.tv_name, R.id.tv_age };
- SimpleAdapter adapter = new SimpleAdapter(this, data,
- R.layout.person_list_item, from, to);
- listview.setAdapter(adapter);
- }
- }
Copyright ©
Linux教程網 All Rights Reserved