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. }  
  • 1
  • 2
  • 下一页

相关内容