• android学习笔记2:解析xml文件(pull)


     

    1.使用Pull解析器解析XML文档

      Pull解析器的运行方式和SAX解析器很相似,它提供了类似的事件,比如文档开始、文档结束、开始元素和结束元素等。使用parser.next()方法可以进入下一个元素并触发相应的事件。各种事件均已数字的形式被发送,因此可以在程序中使用一个switch语句来对事件进行选择,然后进行相应的事件处理。

    1.1事件类型

      Pull解析器提供的事件类型总共有5种,分别如下:

      (1)START_DOCUMENT 文档开始

      (2)START_TAG       开始元素

      (3)TEXT           文本

      (4)END_TAG        结束元素

      (5)END_DOCUMENT     文档结束

    1.2常用方法

      使用Pull解析器XmlPullParser解析XML文档时,主要会用到以下几个常用方法。

      (1)int getAttributeCount();         //获取当前元素的属性个数

      (2)String getAttributeValue(int index);   //获取属性值

      (3)int getEventType();           //获取事件类型

      (4)String getName();           //用于START_TAG和END_TAG事件中,获取当前元素的名字

      (5)int next();                //处理下一个元素

      (6)int nextText();              //用于START_TAG事件中,获得下一个TEXT类型的元素

    1.3创建Pull解析器

      可以通过以下两个步骤创建一个Pull解析器。

      (1)通过调用XmlPullParserFactory工厂类的newInstance()方法,创建一个Pull解析器工厂对象。

      (2)通过调用Pull解析器工厂对象的newPullParser()方法,创建一个Pull解析器对象。

      创建好了Pull解析器对象之后,就可以通过调用Pull解析器对象的setInput()方法传入想要解析的XML文档了。其中,setInput()方法提供了两种重载的形式,分别为:

      (1)void setInput(Reader in);

      (2)void setInput(InputStream inputStream, String inputEncoding);

    1.4实例

      如下的代码使用Pull解析器对上两篇博文中提到的“person.xml”文档进行了解析,提取出了XML文档中的person信息,并存储到了Person对象列表。

     

     1 /*
     2       * Function :   使用Pull解析器解析XML文档
     3       * Param   :  inputStream      以输入流的形式传入XML文档
     4       *               inputEncoding     XML文档的编码格式
     5       * Retuen  :    List<Person>     Person对象列表
     6       * Author  :    博客园-依旧淡然
     7       */
     8      public static List<Person> readXML(InputStream inputStream, String inputEncoding) throws Exception {
     9          
    10          List<Person> list = null;            //存储解析得到的所有Person对象
    11          Person person = null;               //存储解析得到的单个Person对象
    12          
    13          XmlPullParserFactory factory = XmlPullParserFactory.newInstance();            //创建Pull解析器工厂
    14          XmlPullParser xmlPullParser = factory.newPullParser();         //创建Pull解析器
    15          xmlPullParser.setInput(inputStream, inputEncoding);            //以输入流的形式传入所要解析的XML文档
    16          
    17          int eventType = xmlPullParser.getEventType();         //获取事件类型
    18          while(eventType != XmlPullParser.END_DOCUMENT) {    
    19              switch(eventType) {
    20              case XmlPullParser.START_DOCUMENT:                //文档开始
    21                  list = new ArrayList<Person>();
    22                  break;
    23              case XmlPullParser.START_TAG:                     //开始元素
    24                  if(xmlPullParser.getName().equals("person")) {
    25                      person = new Person();
    26                      int id = Integer.parseInt(xmlPullParser.getAttributeValue(0));    //获取元素的属性值
    27                      person.setId(id);
    28                  } else if(xmlPullParser.getName().equals("name")) {
    29                      String name = xmlPullParser.nextText();    //获取元素的内容
    30                      person.setName(name);
    31                  } else if(xmlPullParser.getName().equals("age")) {
    32                      int age = Integer.parseInt(xmlPullParser.nextText());
    33                      person.setAge(age);
    34                  }
    35                  break;
    36              case XmlPullParser.END_TAG:                        //结束元素
    37                  if(xmlPullParser.getName().equals("person")) {
    38                      list.add(person);
    39                      person = null;
    40                  }
    41                  break;
    42              }
    43              eventType = xmlPullParser.next();            //产生循环,遍历所有元素
    44          }
    45          return list;
    46      }

     

  • 相关阅读:
    abap程序之间调用
    java-response-乱码解决
    java-servlet:response/request
    同平台不允许同时登陆的方案(不同平台可同时登陆)
    @Async 异步http请求,汇总数据处理
    ABAP-VOFM FOR MM-PO PRICE
    ABAP-CDS
    PI-Custom adapter module
    Vue中在移动端如何判断设备是安卓还是ios
    v-show在select中选择bug
  • 原文地址:https://www.cnblogs.com/feimo/p/3151520.html
Copyright © 2020-2023  润新知