歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

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

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.   
  13.     List<User> list = new ArrayList<User>();  
  14.     User user = null;  
  15.     for (int event = parser.getEventType(); event != XmlPullParser.END_DOCUMENT; event = parser.next())  
  16.         switch (event) {  
  17.             case XmlPullParser.START_TAG:  
  18.                 if ("user".equals(parser.getName())) {  
  19.                     user = new User();  
  20.                     String id = parser.getAttributeValue(0);  
  21.                     user.setId(new Integer(id));  
  22.                     list.add(user);  
  23.                 } else if ("name".equals(parser.getName())) {  
  24.                     String name = parser.nextText();  
  25.                     user.setName(name);  
  26.                 } else if ("age".equals(parser.getName())) {  
  27.                     String age = parser.nextText();  
  28.                     user.setAge(new Integer(age));  
  29.                 }  
  30.         }  
  31.   
  32.     return list;  
  33. }  

使用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.   
  11.     serializer.startDocument("UTF-8", true);  
  12.     serializer.startTag(null, "users");  
  13.   
  14.     for (User user : users) {  
  15.         serializer.startTag(null, "user");  
  16.         serializer.attribute(null, "id", user.getId().toString());  
  17.   
  18.         serializer.startTag(null, "name");  
  19.         serializer.text(user.getName());  
  20.         serializer.endTag(null, "name");  
  21.   
  22.         serializer.startTag(null, "age");  
  23.         serializer.text(user.getAge().toString());  
  24.         serializer.endTag(null, "age");  
  25.   
  26.         serializer.endTag(null, "user");  
  27.     }  
  28.   
  29.     serializer.endTag(null, "users");  
  30.     serializer.endDocument();  
  31. }  

用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