使用Pull解析器读取XML文件

来源:互联网 发布:简单hash算法 编辑:程序博客网 时间:2024/06/11 19:40

      除了可以使用 SAX或DOM解析XML文件之外,大家也可以使用Android内置的Pull解析器解析XML文件。 Pull解析器是一个开源的java项目,既可以用于android,也可以用于JavaEE。如果用在javaEE需要把其jar文件放入类路径中,因为Android已经集成进了Pull解析器,所以无需添加任何jar文件。android系统本身使用到的各种xml文件,其内部也是采用Pull解析器进行解析的。 Pull解析器的运行方式与 SAX 解析器相似。它提供了类似的事件,如:开始元素和结束元素事件,使用parser.next()可以进入下一个元素并触发相应事件。跟SAX不同的是, Pull解析器产生的事件是一个数字,而非方法,因此可以使用一个switch对感兴趣的事件进行处理。当元素开始解析时,调用parser.nextText()方法可以获取下一个Text类型节点的值。


使用pull解析器解析xml实例

开发步骤

1.创建要解析的xml文件person.xml

<?xml version="1.0" encoding="UTF-8"?>
<persons>
 <person id="23">
  <name>liming</name>
  <age>30</age>
 </person>
 <person id="20">
  <name>zhangxiaoxiao</name>
  <age>25</age>
 </person>
</persons>

 

2.创建解析后数据要封装到的javabean对象

public class Person {
 private Integer id;
 private String name;
 private Short age;
 public Person(){}
 public Person(Integer id, String name, Short age) {
  this.id = id;
  this.name = name;
  this.age = age;
 }

 

3.使用pull解析器解析person.xml文件

public class PersonService {
 
 public static List<Person> getPersons(InputStream xml) throws Exception{  //接收一个xml文件对象
  List<Person> persons = null;
  Person person = null;
  XmlPullParser parser = Xml.newPullParser();    //利用Android的Xml工具类获取xmlPull解析器
  parser.setInput(xml, "UTF-8");                 //解析文件,设置字符集
  int event = parser.getEventType();             //获取解析状态,返回的是int型数字状态
  while(event != XmlPullParser.END_DOCUMENT){    //如果状态不是结束事件END_DOCUMENT,就递归
   switch (event) {
   case XmlPullParser.START_DOCUMENT:     //如果为开始解析头标签START_DOCUMENT,初始化数据
    persons = new ArrayList<Person>();

   case XmlPullParser.START_TAG:         //如果为开始解析属性START_TAG,则获取数据
    if("person".equals(parser.getName())){    //如果属性名为制定名称则根据属性索引值获取数据
     Integer personid = new Integer(parser.getAttributeValue(0));
     person = new Person();    //创建对象封装属性
     person.setId(personid);
    }else if("name".equals(parser.getName())){   
     person.setName(parser.nextText());    //如果要获取的数据在text中则调用nextText()方法获取
    }else if("age".equals(parser.getName())){
     person.setAge(new Short(parser.nextText()));
    }
  
   case XmlPullParser.END_TAG:    //当触发xml文档结束事件的名称为person(即解析结束位置),将封装对象放入集合,再将对象制空
    if("person".equals(parser.getName())){
     persons.add(person);
     person = null;
    }
    break;
   }
   event = parser.next();   //让指针指向下一个节点
  }
  return persons;
 }


*************************************************************************


0 0
原创粉丝点击