18.JAVA-pull解析XML

2022-10-12,,,,

1.pull解析介绍

pull解析其实和我们上章学的sax解析原理非常类似,在android中非常常用.

java中,需自己获取xmlpull所依赖的类库分别为:kxml2-2.3.0.jar,xmlpull_1_1_3_4c.jar

 

pull和sax区别

  • sax: 被动解析,一旦解析,则必须等待解析完成,不能控制事件的处理主动结束。
  • pull: 主动解析, 比sax会更加灵活,因此可以在满足了需要的条件后停止解析,不再获取事件.

 

2.pull解析步骤

  • 获取xmlpullparser解析器,通过xmlpullparserfactory工厂类获取
  • 通过xmlpullparser. setinput(new fileinputstream (),"utf-8")设置解析器的输入文件以及格式
  • 然后通过xmlpullparser.geteventtype()一直while获取当前事件类型(文档开头/元素开头/内容/文档结束等).然后通过getname()等方法获取元素名、内容等,直到遇到end_document(文档结束)退出.

xmlpullparser中常用方法如下:

getname();                  //获取当前元素名

gettextcharacters();        //获取当前内容(当geteventtype ()==text时通过这个来获取元素内容)

nexttext();                 //获取下个内容(当geteventtype ()==start_tag时通过这个来获取元素内容)

3.persons.xml示例如下

<?xml version="1.0" encoding="utf-8" standalone="no"?>
<persons>
    <person>
    <姓名>张三</姓名>
    <性别>男</性别>
    <年龄>99</年龄>
    </person>

    <person>
    <姓名>李四</姓名>
    <性别>男</性别>
    <年龄>17</年龄>
    </person>

</persons>

4.代码如下

@test

         public void pullparsexml() throws exception{
                  arraylist<person> list = null;
                  person person = null;                      

                  //1.获取xmlpullparser解析器,通过xmlpullparserfactory工厂类获取
                  xmlpullparserfactory xmlpullparserfactory = xmlpullparserfactory.newinstance();
                  xmlpullparser xmlpullparser = xmlpullparserfactory.newpullparser();
                  //2.设置解析器的输入文件以及格式
                  xmlpullparser.setinput(new fileinputstream(new file("src//persons.xml")),"utf-8");

                  //3.while获取当前事件类型.然后获取元素名、内容等,直到遇到end_document(文档结束)退出.
                  int type = xmlpullparser.geteventtype();
                  while(type!=xmlpullparser.end_document)
                  {
                          if(type==xmlpullparser.start_tag)               //开始元素
                          {
                                   if("persons".equals(xmlpullparser.getname()))
                                   {
                                            list = new arraylist<person>();
                                   }
                                   else if("person".equals(xmlpullparser.getname()))
                                   {
                                            person = new person();
                                   }
                                   else if("姓名".equals(xmlpullparser.getname()))
                                   {
                                            person.setname(xmlpullparser.nexttext());
                                   }
                                   else if("性别".equals(xmlpullparser.getname()))
                                   {
                                            person.setsex(xmlpullparser.nexttext());
                                   }
                                   else if("年龄".equals(xmlpullparser.getname()))
                                   {
                                            person.setage(xmlpullparser.nexttext());
                                   }
                          }
                          else if(type==xmlpullparser.end_tag)          //结束元素
                          {
                                   if("person".equals(xmlpullparser.getname()))
                                   {
                                            list.add(person);
                                   }
                          }
                          type = xmlpullparser.next();
                  }

                  //打印:
                  for(person person1:list){
                          system.out.println(person1);
                  }
         }

打印:

 

 

 

 

 

《18.JAVA-pull解析XML.doc》

下载本文的Word格式文档,以方便收藏与打印。