XML解析_PULL

前端之家收集整理的这篇文章主要介绍了XML解析_PULL前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

除了可以使用 SAX和DOM解析XML文件,大家也可以使用Android内置的Pull解析器解析XML文件Pull解析器的运行方式与 SAX 解析器相似。它提供了类似的事件,如:开始元素和结束元素事件,使用parser.next()可以进入下一个元素并触发相应事件。事件将作为数值代码被发送,因此可以使用一个switch对感兴趣的事件进行处理。当元素开始解析时,调用parser.nextText()方法可以获取下一个Text类型元素的值。

下面列出需要解析的XML文件,保存在Android的assets目录下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <persons>
  3. <person id="23">
  4. <name>小明</name>
  5. <age>30</age>
  6. </person>
  7. <person id="20">
  8. <name>小强</name>
  9. <age>25</age>
  10. </person>
  11. </persons>
  1. package com.example.xmlpullparse;
  2.  
  3. public class PersonBean {
  4. private int id;
  5. private String name;
  6. private int age;
  7. public int getId() {
  8. return id;
  9. }
  10. public void setId(int id) {
  11. this.id = id;
  12. }
  13. public String getName() {
  14. return name;
  15. }
  16. public void setName(String name) {
  17. this.name = name;
  18. }
  19. public int getAge() {
  20. return age;
  21. }
  22. public void setAge(int age) {
  23. this.age = age;
  24. }
  25.  
  26. }

在MainActivity中解析文件显示

  1. package com.example.xmlpullparse;
  2.  
  3. import java.io.IOException;
  4. import java.io.InputStream;
  5. import java.util.ArrayList;
  6. import java.util.List;
  7. import org.xmlpull.v1.XmlPullParser;
  8.  
  9. import com.example.xmlsaxparse.R;
  10.  
  11. import android.app.Activity;
  12. import android.os.Bundle;
  13. import android.util.Xml;
  14. import android.widget.TextView;
  15.  
  16. public class MainActivity extends Activity {
  17.  
  18. private TextView textView;
  19. private String notice = "";
  20. private InputStream inStream;
  21. private PersonBean currentPerson = null;
  22. private List<PersonBean> persons = null;
  23.  
  24. @Override
  25. protected void onCreate(Bundle savedInstanceState) {
  26. super.onCreate(savedInstanceState);
  27. setContentView(R.layout.activity_main);
  28. textView = (TextView) findViewById(R.id.test);
  29. try {
  30. inStream = this.getAssets().open("test.xml");
  31. } catch (IOException e) {
  32. e.printStackTrace();
  33. }
  34.  
  35. persons = readXML(inStream);
  36. for (int i = 0; i < persons.size(); i++) {
  37. notice += persons.get(i).getName() + persons.get(i).getAge();
  38. }
  39.  
  40. textView.setText(notice);
  41. }
  42.  
  43. public List<PersonBean> readXML(InputStream inStream) {
  44.  
  45. XmlPullParser parser = Xml.newPullParser();
  46. try {
  47.  
  48. parser.setInput(inStream,"UTF-8");
  49. int eventType = parser.getEventType();
  50. while (eventType != XmlPullParser.END_DOCUMENT) {
  51. switch (eventType) {
  52.  
  53. case XmlPullParser.START_DOCUMENT:// 文档开始事件,可以进行数据初始化处理
  54.  
  55. persons = new ArrayList<PersonBean>();
  56. break;
  57.  
  58. case XmlPullParser.START_TAG:// 开始元素事件
  59.  
  60. String name = parser.getName();
  61. if (name.equalsIgnoreCase("person")) {
  62.  
  63. currentPerson = new PersonBean();
  64. currentPerson.setId(Integer.valueOf(parser
  65. .getAttributeValue(null,"id")));
  66.  
  67. } else if (currentPerson != null) {
  68.  
  69. if (name.equalsIgnoreCase("name")) {
  70. currentPerson.setName(parser.nextText());// 如果后面是Text元素,即返回它的值
  71.  
  72. } else if (name.equalsIgnoreCase("age")) {
  73.  
  74. currentPerson.setAge(new Short(parser.nextText()));
  75.  
  76. }
  77.  
  78. }
  79. break;
  80.  
  81. case XmlPullParser.END_TAG:// 结束元素事件
  82.  
  83. if (parser.getName().equalsIgnoreCase("person")
  84. && currentPerson != null) {
  85.  
  86. persons.add(currentPerson);
  87. currentPerson = null;
  88. }
  89. break;
  90.  
  91. }
  92.  
  93. eventType = parser.next();
  94. }
  95.  
  96. inStream.close();
  97. return persons;
  98.  
  99. } catch (Exception e) {
  100.  
  101. e.printStackTrace();
  102.  
  103. }
  104.  
  105. return null;
  106. }
  107.  
  108. }

猜你在找的XML相关文章