欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

18.JAVA-pull解析XML

程序员文章站 2022-07-02 12:31:48
1.pull解析介绍 pull解析其实和我们上章学的sax解析原理非常类似,在Android中非常常用. 在java中,需自己获取xmlpull所依赖的类库分别为:kxml2-2.3.0.jar,xmlpull_1_1_3_4c.jar。 pull和sax区别 sax: 被动解析,一旦解析,则必须等 ......

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