zoukankan      html  css  js  c++  java
  • 使用Pull解析器读取XML文件

    除了可以使用 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解析器读取itcast.xml的代码在本页下方备注
     
    Pull解析器的源码及文档下载网址:http://xmlpull.org/xmlpull-website/impls.shtml
     
    1、
    public class PersonService {
     public static List<Person> getPersons(InputStream xml)throws Exception{
      List<Person> persons=null;
      Person person=null;
      XmlPullParser pullParser=Xml.newPullParser();
      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("age".equals(pullParser.getName())){
         int age=new Integer(pullParser.nextText());
         person.setAge(age);
        }
        if("name".equals(pullParser.getName())){
         String name=pullParser.nextText();
         person.setName(name);
        }
        break;
       case XmlPullParser.END_TAG:
        if("person".equals(pullParser.getName())){
         persons.add(person);
         person=null;
        }
        break;
       }
       event=pullParser.next();
      }
      return persons;
     }
    调用上述方法

    private static final String TAG = "PersonsServiceTest";

    
    

     public void testGetPersons()throws Exception{   

    InputStream xml=this.getClass().getClassLoader().getResourceAsStream("person.xml");   //person.xml在src文件夹里

    PersonService personservice=new PersonService();   

    List<Person> persons=personservice.getPersons(xml);   

    for(Person person : persons){    Log.i(TAG, person.toString());   }  }

    2、也可以
    public List<Person> getPersonsT(XmlResourceParser xml)throws Exception{
      List<Person> persons=null;
      Person person=null;
      int event=xml.getEventType();
      while(event!=XmlResourceParser.END_DOCUMENT){
       switch (event) {
       case XmlResourceParser.START_DOCUMENT:
        persons=new ArrayList<Person>();
        break;
       case XmlResourceParser.START_TAG:
        if("person".equals(xml.getName())){
         int id=new Integer(xml.getAttributeValue(0));
         person=new Person();
         person.setId(id);
        }
        if("age".equals(xml.getName())){
         int age=new Integer(xml.nextText());
         person.setAge(age);
        }
        if("name".equals(xml.getName())){
         String name=xml.nextText();
         person.setName(name);
        }
        break;
       case XmlResourceParser.END_TAG:
        if("person".equals(xml.getName())){
         persons.add(person);
         person=null;
        }
        break;
       }
       event=xml.next();
      }
      return persons;
     }
    }

    调用上述方法
    public void testGetPersonsT()throws Exception{
      XmlResourceParser xml=getContext().getResources().getXml(R.xml.person);//person.xml在xml文件夹里
      PersonService personservice=new PersonService();
      List<Person> persons=personservice.getPersonsT(xml);
      for(Person person : persons){
       Log.i(TAG, person.toString());
      }
     }
  • 相关阅读:
    MSSQL系列 (一):数据库的相关操作
    C#数据结构与算法系列(二十三):归并排序算法(MergeSort)
    C#数据结构与算法系列(二十二):快速排序算法(QuickSort)
    Quartz.Net系列(十七):Misfire策略在SimpleScheduler和CronScheduler中的使用
    Quartz.Net系列(十六):通过Plugins模式使用Xml方式配置Job和Trigger和自定义LogPrivider
    Quartz.Net系列(十五):Quartz.Net四种修改配置的方式
    Quartz.Net系列(十四):详解Job中两大特性(DisallowConcurrentExecution、PersistJobDataAfterExecution)
    Quartz.Net系列(十三):DateBuilder中的API详解
    Quartz.Net系列(十二):六大Calendar(Annual、Cron、Daily、Holiday、Monthly、Weekly)
    Quartz.Net系列(十一):System.Timers.Timer+WindowsService实现定时任务
  • 原文地址:https://www.cnblogs.com/wdc224/p/3920558.html
Copyright © 2011-2022 走看看