• 使用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());
      }
     }
  • 相关阅读:
    总结Linq或者lamdba的写法
    JObject 用法 、JProperty 用法、JArray 用法 Linq 转 Json
    System.DateTime.Now 24小时制。
    将springboot jar应用打包成镜像并在docker运行成容器
    RPC框架——简单高效hessian的使用方式
    WebService—规范介绍和几种实现WebService的框架介绍
    Java三大体系JavaEE、JavaSE、JavaME的区别
    JavaEE体系架构
    JavaEE 技术体系
    注解之@CookieValue
  • 原文地址:https://www.cnblogs.com/wdc224/p/3920558.html
Copyright © 2020-2023  润新知