歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android-XML解析Dom,Sax,Pull

Android-XML解析Dom,Sax,Pull

日期:2017/3/1 10:55:38   编辑:Linux編程

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. public class XMLActivity extends Activity implements OnClickListener{
  16. /** Called when the activity is first created. */
  17. private Button btn_dom;
  18. private Button btn_sax;
  19. private Button btn_pull;
  20. private ListView listview;
  21. @Override
  22. public void onCreate(Bundle savedInstanceState) {
  23. super.onCreate(savedInstanceState);
  24. setContentView(R.layout.main);
  25. init();
  26. }
  27. private void init(){
  28. btn_dom=(Button) findViewById(R.id.dom);
  29. btn_sax=(Button) findViewById(R.id.sax);
  30. btn_pull =(Button) findViewById(R.id.pull);
  31. listview =(ListView) findViewById(R.id.list);
  32. btn_dom.setOnClickListener(this);
  33. btn_sax.setOnClickListener(this);
  34. btn_pull.setOnClickListener(this);
  35. }
  36. public void onClick(View v) {
  37. // TODO Auto-generated method stub
  38. int id = v.getId();
  39. List<Person> list = null;
  40. InputStream is = null;
  41. AssetManager manager = getAssets();
  42. try
  43. { //讀取xml文件。
  44. is = manager.open("persons.xml");
  45. } catch (IOException e)
  46. {
  47. e.printStackTrace();
  48. }
  49. switch (id)
  50. {
  51. case R.id.dom: //使用dom解析
  52. try
  53. {
  54. list = new DomParseService().getPersonsByParseXml(is);
  55. showUI(list);
  56. } catch (Exception e)
  57. {
  58. e.printStackTrace();
  59. }
  60. break;
  61. case R.id.sax: //使用sax解析
  62. try
  63. {
  64. list = new SAXParseService().getPersonsByParseXml(is);
  65. showUI(list);
  66. } catch (Exception e)
  67. {
  68. e.printStackTrace();
  69. }
  70. break;
  71. case R.id.pull: //使用pull解析
  72. try
  73. {
  74. list = new PullParseService().getPersonsByParseXml(is);
  75. showUI(list);
  76. } catch (Exception e)
  77. {
  78. e.printStackTrace();
  79. }
  80. break;
  81. default:
  82. break;
  83. }
  84. try
  85. {
  86. is.close();
  87. } catch (IOException e)
  88. {
  89. // TODO Auto-generated catch block
  90. e.printStackTrace();
  91. }
  92. }
  93. public void showUI(List<Person> list)
  94. {
  95. List<Map<String, Object>> data = new ArrayList<Map<String, Object>>();
  96. for (Person p : list)
  97. {
  98. Map<String, Object> map = new HashMap<String, Object>();
  99. map.put("id", p.getId());
  100. map.put("name", p.getName());
  101. map.put("age", p.getAge());
  102. data.add(map);
  103. }
  104. String[] from =
  105. { "id", "name", "age" };
  106. int[] to =
  107. { R.id.tv_id, R.id.tv_name, R.id.tv_age };
  108. SimpleAdapter adapter = new SimpleAdapter(this, data,
  109. R.layout.person_list_item, from, to);
  110. listview.setAdapter(adapter);
  111. }
  112. }
Copyright © Linux教程網 All Rights Reserved