前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >18.JAVA-pull解析XML

18.JAVA-pull解析XML

作者头像
诺谦
发布2019-12-12 16:55:20
5650
发布2019-12-12 16:55:20
举报
文章被收录于专栏:Linux驱动Linux驱动

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中常用方法如下:

代码语言:javascript
复制
getName();                  //获取当前元素名

getTextCharacters();        //获取当前内容(当getEventType ()==TEXT时通过这个来获取元素内容)

nextText();                 //获取下个内容(当getEventType ()==START_TAG时通过这个来获取元素内容)

3.persons.xml示例如下

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<persons>
    <person>
    <姓名>张三</姓名>
    <性别>男</性别>
    <年龄>99</年龄>
    </person>

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

</persons>

4.代码如下

代码语言:javascript
复制
@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);
                  }
         }

打印:

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-12-12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.pull解析介绍
  • 2.pull解析步骤
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档