• 使用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());
      }
     }
  • 相关阅读:
    Composite in Javascript
    Model Validation in Asp.net MVC
    HttpRuntime.Cache vs. HttpContext.Current.Cache
    Controller Extensibility in ASP.NET MVC
    The Decorator Pattern in Javascript
    The Flyweight Pattern in Javascript
    Model Binding in ASP.NET MVC
    Asp.net MVC
    jQuery Ajax 实例 全解析
    ASP.NET AJAX入门系列
  • 原文地址:https://www.cnblogs.com/wdc224/p/3920558.html
Copyright © 2020-2023  润新知