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

Android數據存儲與訪問之使用pull解析器

Pull解析器是一個開源的java項目,既可以用於Android,也可以用於JavaEE。如果用在javaEE需要把其jar文件放入類路徑中,因為Android已經集成進了Pull解析器,所以無需添加任何jar文件。android系統本身使用到的各種xml文件,其內部也是采用Pull解析器進行解析的。 Pull解析器的運行方式與 SAX 解析器相似。它提供了類似的事件,如:開始元素和結束元素事件,使用parser.next()可以進入下一個元素並觸發相應事件。跟SAX不同的是, Pull解析器產生的事件是一個數字,而非方法,因此可以使用一個switch對感興趣的事件進行處理。當元素開始解析時,調用parser.nextText()方法可以獲取下一個Text類型節點的值。

如下為要解析的XML文件

文件名稱:persons.xml

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <persons>  
  3.     <person id=“18">  
  4.         <name>allen</name>  
  5.         <age>36</age>  
  6.     </person>  
  7.     <person id=“28">  
  8.         <name>james</name>  
  9.         <age>25</age>  
  10.     </person>  
  11. </persons>  

例子定義了一個javabean用於存放上面解析出來的xml內容, 這個javabean為Person,如下:

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

使用Pull解析器讀取itcast.xml的代碼如下:

  1. import org.xmlpull.v1.XmlPullParser;  
  2. import android.util.Xml;  
  3. import cn.itcast.xml.domain.Person;  
  4.   
  5. public class PullXMLReader {  
  6.   
  7. public static List<Person> readXML(InputStream inStream) {  
  8.     XmlPullParser parser = Xml.newPullParser();  
  9.     try {  
  10.     parser.setInput(inStream, "UTF-8");  
  11.     int eventType = parser.getEventType();  
  12.     Person currentPerson = null;  
  13.     List<Person> persons = null;  
  14.     while (eventType != XmlPullParser.END_DOCUMENT) {  
  15.         switch (eventType) {  
  16.         case XmlPullParser.START_DOCUMENT://文檔開始事件,可以進行數據初始化處理   
  17.             persons = new ArrayList<Person>();  
  18.             break;  
  19.         case XmlPullParser.START_TAG://開始元素事件   
  20.             String name = parser.getName();  
  21.             if (name.equalsIgnoreCase("person")) {  
  22.                 currentPerson = new Person();  
  23.                 currentPerson.setId(new Integer(parser.getAttributeValue(null"id")));  
  24.             } else if (currentPerson != null) {  
  25.                 if (name.equalsIgnoreCase("name")) {  
  26.                     currentPerson.setName(parser.nextText());// 如果後面是Text節點,即返回它的值   
  27.                 } else if (name.equalsIgnoreCase("age")) {  
  28.                     currentPerson.setAge(new Short(parser.nextText()));  
  29.                 }  
  30.             }  
  31.             break;  
  32.         case XmlPullParser.END_TAG://結束元素事件   
  33.             if (parser.getName().equalsIgnoreCase("person") && currentPerson != null) {  
  34.                 persons.add(currentPerson);  
  35.                 currentPerson = null;  
  36.             }  
  37.             break;  
  38.         }  
  39.         eventType = parser.next();  
  40.     }  
  41.     inStream.close();  
  42.     return persons;  
  43.     } catch (Exception e) {  
  44.         e.printStackTrace();  
  45.     }  
  46.     return null;  
  47. }  
  48. }  
Copyright © Linux教程網 All Rights Reserved