歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android使用Pull解析器解析XML文件

Android使用Pull解析器解析XML文件

日期:2017/3/1 11:16:59   编辑:Linux編程

Pull簡介

1.常見的XML解析方式有三種,DOM、SAX、Pull,Android系統中推薦使用Pull

2.Pull解析器是一個開源的Java項目,Android系統內部解析XML文件均為此種方式,也可用於JavaEE項目

3.Android SDK中已經集成了Pull解析器,無需添加任何jar文件

4.Pull解析器運行方式與SAX類似,提供各種事件的判斷

5.官方網站:http://xmlpull.org/

使用Pull解析器解析XML文件

1. Xml.newPullParser() 獲得解析器

2 parser.setInput(in, "UTF-8") 設置輸入流以及編碼

3. parser.next() 獲取下一個解析事件,得到一個事件代碼

4. XmlPullParser中定義了常量來標識各種解析事件

START_DOCUMENT、END_DOCUMENT 、START_TAG 、END_TAG 、TEXT

示例:

  1. /**
  2. * 接收一個XML文件輸入流, 從輸入流中讀所有User節點, 將數據封裝成對象裝入List返回
  3. * @param in XML文件的輸入流
  4. * @return User對象的集合
  5. * @throws Exception
  6. */
  7. public List<User> findAll(InputStream in) throws Exception {
  8. // 獲取Pull解析器
  9. XmlPullParser parser = Xml.newPullParser();
  10. // 解析器加載輸入流
  11. parser.setInput(in, "UTF-8");
  12. List<User> list = new ArrayList<User>();
  13. User user = null;
  14. for (int event = parser.getEventType(); event != XmlPullParser.END_DOCUMENT; event = parser.next())
  15. switch (event) {
  16. case XmlPullParser.START_TAG:
  17. if ("user".equals(parser.getName())) {
  18. user = new User();
  19. String id = parser.getAttributeValue(0);
  20. user.setId(new Integer(id));
  21. list.add(user);
  22. } else if ("name".equals(parser.getName())) {
  23. String name = parser.nextText();
  24. user.setName(name);
  25. } else if ("age".equals(parser.getName())) {
  26. String age = parser.nextText();
  27. user.setAge(new Integer(age));
  28. }
  29. }
  30. return list;
  31. }

使用XmlSerializer寫出XML

使用以下方法生成XML,和XML文檔順序類似

startDocument

startTag

attribute

text

endTag

endDocument

  1. /**
  2. * 使用XmlSerializer寫出XML
  3. * @param users User集合
  4. * @param out 輸出流
  5. * @throws IOException
  6. */
  7. public void saveAllByXmlSerializer(List<User> users, OutputStream out) throws IOException {
  8. XmlSerializer serializer = Xml.newSerializer();
  9. serializer.setOutput(out, "UTF-8");
  10. serializer.startDocument("UTF-8", true);
  11. serializer.startTag(null, "users");
  12. for (User user : users) {
  13. serializer.startTag(null, "user");
  14. serializer.attribute(null, "id", user.getId().toString());
  15. serializer.startTag(null, "name");
  16. serializer.text(user.getName());
  17. serializer.endTag(null, "name");
  18. serializer.startTag(null, "age");
  19. serializer.text(user.getAge().toString());
  20. serializer.endTag(null, "age");
  21. serializer.endTag(null, "user");
  22. }
  23. serializer.endTag(null, "users");
  24. serializer.endDocument();
  25. }

用StringBuilder寫出XML文件

以下是自己拼接的而成的,如果裡邊有特殊符號的話就不太好做

  1. /**
  2. * 將若干User用XML形式描述, 輸出到指定輸出流
  3. * @param users User集合
  4. * @param out 輸出流
  5. * @throws IOException
  6. */
  7. public void saveAll(List<User> users, OutputStream out) throws IOException {
  8. StringBuilder sb = new StringBuilder();
  9. sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
  10. sb.append("<users>");
  11. for (User user : users) {
  12. sb.append("<user id=\"" + user.getId() + "\">");
  13. sb.append("<name>" + user.getName() + "</name>");
  14. sb.append("<age>" + user.getAge() + "</age>");
  15. sb.append("</user>");
  16. }
  17. sb.append("</users>");
  18. out.write(sb.toString().getBytes());
  19. out.close();
  20. }
Copyright © Linux教程網 All Rights Reserved