• 18.JAVA-pull解析XML


    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);
                      }
             }

    打印:

     

     

     

  • 相关阅读:
    好学习法
    error execution phase upload-config/kubelet: Error writing Crisocket information for the control-plane node: timed out waiting for the condition
    linux 大实话
    解决vi/vim中粘贴 格式错乱
    centos7 调试系统服务命令
    gitlab jenkins docker kubernetes
    修改centos7主机名
    野战ci/cd
    相互交流生成快捷网页链接
    设置centos7静态网卡配置文件
  • 原文地址:https://www.cnblogs.com/lifexy/p/12028842.html
Copyright © 2020-2023  润新知