首页 > 代码库 > 通过pull解析器操作安卓的xml

通过pull解析器操作安卓的xml

通过pull解析器操作安卓的xml

 

例子定义了一个javabean用于存放上面解析出来的xml内容, 这个javabean为Person,代码请见本页下面备注:

 ==============================================================================================

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

public class PersonService {
 
 public static List getPersons(InputStream xml) throws Exception{  //接收一个xml文件对象
  List 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();
    break;
    
   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()));
    }
    break;
   case XmlPullParser.END_TAG:    //当触发xml文档结束事件的名称为person(即解析结束位置),将封装对象放入集合,再将对象制空
    if("person".equals(parser.getName())){
     persons.add(person);
     person = null;
    }
    break;
   }
   event = parser.next();   //让指针指向下一个节点
  }
  return persons;
 }


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

通过pull接续器创建xml文档


 public static void save(List persons, OutputStream outStream) throws Exception{
  XmlSerializer serializer = Xml.newSerializer();  //创建xml的序列化文件
  serializer.setOutput(outStream, "UTF-8");        //传入保存的输出流,和字符集编码
  serializer.startDocument("UTF-8", true);         //xml头标签字符集设置,是否序列化
  serializer.startTag(null, "persons");            //开始节点设置,(命名空间null,名称persons)
  for(Person person : persons){                    //循环设置每个节点的属性和数据
   serializer.startTag(null, "person");
   serializer.attribute(null, "id", person.getId().toString());
   
   serializer.startTag(null, "name");
   serializer.text(person.getName());
   serializer.endTag(null, "name");
   
   serializer.startTag(null, "age");
   serializer.text(person.getAge().toString());
   serializer.endTag(null, "age");
   
   serializer.endTag(null, "person");
  }
  serializer.endTag(null, "persons");   //设置结束节点
  serializer.endDocument();              //结束xml编辑,即设置xml文档结尾
  outStream.flush();                    //最好先将缓存中数据刷出再关闭输出流以防传入的流是缓存流
  outStream.close();
 }
}

通过pull解析器操作安卓的xml