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>
- 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);
- }
- }
相关推荐
IT之家 2020-03-11
graseed 2020-10-28
zbkyumlei 2020-10-12
SXIAOYI 2020-09-16
jinhao 2020-09-07
impress 2020-08-26
liuqipao 2020-07-07
淡风wisdon大大 2020-06-06
yoohsummer 2020-06-01
chenjia00 2020-05-29
baike 2020-05-19
扭来不叫牛奶 2020-05-08
hxmilyy 2020-05-11
黎豆子 2020-05-07
xiongweiwei00 2020-04-29
Cypress 2020-04-25
冰蝶 2020-04-20