一、基本介绍

Android中极力推荐xmlpull方式解析xml。
xmlpull不仅可用在Android上同样也适用于javase,但在javase环境中需自己获取xmlpull所依赖的类库,kxml2-2.3.0.jar,xmlpull_1_1_3_4c.jar。

jar包下载网址

http://www.xmlpull.org/
http://kxml.sourceforge.net/

 

二、例子

读取到xml的声明返回数字0 START_DOCUMENT;

读取到xml的结束返回数字1 END_DOCUMENT ;
读取到xml的开始标签返回数字2 START_TAG
读取到xml的结束标签返回数字3 END_TAG
读取到xml的文本返回数字4 TEXT

 
  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <people> 
  3.  <person id="001"> 
  4.   <name>XY1</name> 
  5.   <age>22</age> 
  6.  </person> 
  7.  <person id="002"> 
  8.   <name>XY2</name> 
  9.   <age>22</age> 
  10.  </person> 
  11. </people> 

 

 
  1. public class PersonService  
  2. {  
  3.    
  4.  public List getPeople(InputStream xml) throws Exception  
  5.  {  
  6.   List lst = null;  
  7.   Person person = null;  
  8.  
  9.   // 获得pull解析器工厂  
  10.   XmlPullParserFactory pullParserFactory = XmlPullParserFactory.newInstance();  
  11.     
  12.   //获取XmlPullParser的实例  
  13.   XmlPullParser pullParser = pullParserFactory.newPullParser();  
  14.  
  15.  
  16.  // 设置需要解析的XML数据  
  17.   pullParser.setInput(xml, "UTF-8");  
  18.  
  19.   // 取得事件  
  20.   int event = pullParser.getEventType();  
  21.  
  22.   // 若为解析到末尾  
  23.   while (event != XmlPullParser.END_DOCUMENT) // 文档结束  
  24.   {  
  25.    // 节点名称  
  26.    String nodeName = pullParser.getName();  
  27.    switch (event)  
  28.    {  
  29.     case XmlPullParser.START_DOCUMENT: // 文档开始  
  30.      lst = new ArrayList();  
  31.      break;  
  32.     case XmlPullParser.START_TAG: // 标签开始  
  33.      if ("person".equals(nodeName))  
  34.      {  
  35.       String id = pullParser.getAttributeValue(0);  
  36.       person = new Person();  
  37.       person.setId(id);  
  38.      }  
  39.      if ("name".equals(nodeName))  
  40.      {  
  41.       String name = pullParser.nextText();  
  42.       person.setName(name);  
  43.      }  
  44.      if ("age".equals(nodeName))  
  45.      {  
  46.       int age = Integer.valueOf(pullParser.nextText());  
  47.       person.setAge(age);  
  48.      }  
  49.      break;  
  50.     case XmlPullParser.END_TAG: // 标签结束  
  51.      if ("person".equals(nodeName))  
  52.      {  
  53.       lst.add(person);  
  54.       person = null;  
  55.      }  
  56.      break;  
  57.    }  
  58.    event = pullParser.next(); // 下一个标签  
  59.   }  
  60.   return lst;  
  61.  }  
  62. }