android开发 - pull解析器

来源:互联网 发布:免手机号注册qq 知乎 编辑:程序博客网 时间:2024/05/26 07:30


使用SAX或者DOM或者pull解析XML文件


在Android平台上可以使用Simple API for XML(SAX)、Document Object Model(DOM)


除了可以使用SAX或DOM解析XML文件之外,大家也可以使用Android内置的pull解析器XML文件,Pull解析器是一个开源的Java项目,即可以用于Android


android集成了pull解析器






XML节点


根节点     Node Type


  Element Node
    
           Text Node






















首页我们创建一个Person类,里面有age,name的属性和字段


















//以下为解析XML






public List<Person> getPersons(InputStrea xml) throws Exception{


    List<Person> persons=null;
    Person person = null;


    XmlPullParser pullParser = Xml.newPullParser();
    //为pull解析器设置要解析的XML数据
    pullParser.setInput(xml,"utf-8");   


    int event = pullParser.getEventType();


    while(event != XmlPullParser.END_DOCUMENT){
    switch(event){
         case XmlPullParser.START_DOCUMENT:
     persons = new ArrayList<Person>();
break;
        
         case XmlPullParser.START_TAG:
    if("person".equals(pullParser.getName())){
                   int id = new Integer(pullParser.getAttributeValue(0));
                   person = new Person();
  person.setId(Id);


             }
             if("name".equals(pullParser.getName()))
             {
                 String name = pullParser.nextText();
    person.setName(name);
              }     
              if("age".equals(pullParser.getName())){
                  int age = new Integer(pullParser.nextText());
 person.setAge(age);
              }
 
 break;


          case XmlPullParser.END_TAG:
if("person".equals(pullParser.getName())){
persons.add(person);
person = null;
}
  break;
       }
      }


      event = pullParser.next();
     return persons;
}












//以下为读取XML内容


private static final String TAG = "PersonServiceTest";
public void testPersons() throws Exception{
    InputStream xml = this.getClass().getClassLoader().getResourceAsStream("person.xml");
    
    List<Person> persons = PersonService.getPersons(xml);   
    for(Person person : persons)
    {
         Log.i(TAG,person.toString());
     }   
 
}


































































使用pull解析器,向xml插入数据


public static void save(List<Person> persons ,OutputStream out) throws Exception{
   XmlSerializer serializer = Xml.newSerializer();
   serializer.setOutput(out,"UTF-8");       
   serializer.startDocument("UTF-8",true);    //开始文档
   serializer.starTag(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().toString());
        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();                 //结束文档
 
   out.flush();
   out.close();
}






































单元测试


public void testSave() throws Exception{
   List<Person> persons = new ArrayList<Person>();
   persons.add(new Person(43,"zhangxx",80));
   persons.add(new Person(12,"lili",20));
   persons.add(new Person(78,"xiaoxiao",8));
   
   File xmlFile = new File(getContext().getFilesDir(),"itcast.xml");
   FileOutputStream outStream = new FileOutputStream(xmlFile);
   PersonService.save(persons,outStream);


}





























































0 0
原创粉丝点击