初涉XML解析

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

Extensible Markup Language (XML) 是一组将文档编码成机器可读形式的规则,也是一种在网络上共享数据的普遍格式。经常更新内容的网站比如新闻网站和博客上都提供XML Feed来记录更新的信息,以便用户进行订阅读取。

解析器我们用XMLPullParser ,Android 官网推荐。如果对xml不熟悉可以先看下http://www.w3cschool.cc/xml/xml-tutorial.html;

今天写的demo是基于上次的AsyncTask之下载HTML的扩充 ,首先我写了一个persons.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <persons>
  3. <person id="1">
  4. <name>Tom</name>
  5. <age>21</age>
  6. </person>
  7. <person id="2">
  8. <name>Rose</name>
  9. <age>22</age>
  10. </person>
  11. <person id="3">
  12. <name>Jack</name>
  13. <age>20</age>
  14. </person>
  15. </persons>

之后我把它上传到了七牛云存储,地址http://carousel.qiniudn.com/persons.xml,可以直接点击查看,下载。

接下来在工程下写一个Person JavaBean:

  1. public class Person {
  2. public String getName() {
  3. return name;
  4. }
  5. public void setName(String name) {
  6. this.name = name;
  7. }
  8. public Short getAge() {
  9. return age;
  10. }
  11. public void setAge(Short age) {
  12. this.age = age;
  13. }
  14. public Integer getId() {
  15. return id;
  16. }
  17. public void setId(Integer id) {
  18. this.id = id;
  19. }
  20. private Integer id;
  21. private String name;
  22. private Short age;
  23. }


在MainActivity加入 readXML():

  1. public List<Person> readXML(InputStream inStream) {
  2. // Log.i("LIST","startReadXML");
  3. //创建解析器对象,生成实例
  4. XmlPullParser parser = Xml.newPullParser();
  5. try {
  6. parser.setInput(inStream,"UTF-8");// 设置数据源编码
  7. int eventType = parser.getEventType();// 获取事件类型
  8. Person currentPerson = null;
  9. List<Person> persons = null;
  10. while (eventType != XmlPullParser.END_DOCUMENT) {
  11. switch (eventType) {
  12. case XmlPullParser.START_DOCUMENT:// 文档开始事件,可以进行数据初始化处理
  13. persons = new ArrayList<Person>();// 实例化集合类
  14. break;
  15. case XmlPullParser.START_TAG:// 开始读取某个标签
  16. // 通过getName判断读到哪个标签,然后通过nextText()获取文本节点值,或通过getAttributeValue(i)获取属性节点值
  17. String name = parser.getName();
  18. if (name.equalsIgnoreCase("person")) {
  19. currentPerson = new Person();
  20. currentPerson.setId(new Integer(parser
  21. .getAttributeValue(null,"id")));
  22. } else if (currentPerson != null) {
  23. if (name.equalsIgnoreCase("name")) {
  24. currentPerson.setName(parser.nextText());// 如果后面是Text元素,即返回它的值
  25. Log.i("LIST",currentPerson.getName());
  26. } else if (name.equalsIgnoreCase("age")) {
  27. currentPerson.setAge(new Short(parser.nextText()));
  28. }
  29. }
  30. break;
  31. case XmlPullParser.END_TAG:// 结束元素事件
  32. // 读完一个Person,可以将其添加到集合类中
  33. if (parser.getName().equalsIgnoreCase("person")
  34. && currentPerson != null) {
  35. persons.add(currentPerson);
  36. currentPerson = null;
  37. }
  38. break;
  39. }
  40. eventType = parser.next();
  41. }
  42. inStream.close();
  43. return persons;
  44. } catch (Exception e) {
  45. e.printStackTrace();
  46. }
  47. return null;
  48. }

对于上次的downloadUrL() 末尾一点改动:
  1. //获取InputSream
  2. is = conn.getInputStream();
  3. //把InputStream 转为 String
  4. // String contentAsString = readIt(is,len);
  5. StringBuilder strBuilder = new StringBuilder();
  6. List<Person> list = readXML(is);
  7. for (int i = 0; i < list.size(); i++) {
  8. strBuilder.append("id:" + list.get(i).getId() + "\n");
  9. strBuilder.append("name:" + list.get(i).getName() + "\n");
  10. strBuilder.append("age:" + list.get(i).getAge() + "\n");
  11. strBuilder.append("==========\n");
  12. }
  13. return strBuilder.toString();


运行效果

猜你在找的XML相关文章