0
点赞
收藏
分享

微信扫一扫

android开发 - pull解析器

年夜雪 2023-04-09 阅读 79

使用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 条评论