zoukankan      html  css  js  c++  java
  • Android开发pool解析xml

    xml在开发中的作用不可小觑,很多时候我们都要用到这种文件,所以学习它的解析方式很是必要。

    我们都知道java中xml的解析有:dom,SAX,但是Android下我们使用pool解析,是更为方便,而且有专门的api可以使用。

      dom:一次加载到内存,生成一个树状结构,消耗的内存较大
      SAX:基于事件,速度快,效率高,不能回退。

    1,首先我们需要定义出来解析器,它的定义方式,是通过Xml new出来的,这点要记着。

    XmlPullParser parser = Xml.newPullParser();
    

     2,然后我们需要,设置xml的文件源,也即初始化解析器,使用的方法如下,同时我们还要设置起编码格式,xml的编码一般为"utf-8",所以第二个参数我们就写成"utf-8",而第一个参数的话,如果我们的xml放在本地的话,我们可以通过类加载器来得到,且其返回类型就是inputstream。

    parser.setInput(InputStream inputStream, String inputEncoding)
    

     类加载器得到文件的位置,并返回inputstream。

    MainActivity.class.getClassLoader().getResourceAsStream("xml文件路径")
    

     3,初始化解析器后,我们就可以开始了,xml的标签很多,这里呢,我们需要调用的方法是。

    int type = parser.getEventType();
    

    我们查看api可知,这里获得的是标签,

    比如:(这是系统中的定义)

      int START_DOCUMENT = 0;

      int END_DOCUMENT = 1;

      int START_TAG = 2;

      int END_TAG = 3;

     从名字我们就能很容易的知道其含义,xml开始与结束的标签,以及一个标签对的开始与结束。

    所以我们就可以对获得type与这些标签进行对比,这样我们就可以获取标签的值。

    4,解析xml

        while (type != XmlPullParser.END_DOCUMENT) {
                    switch (type) {
                    case XmlPullParser.START_TAG:
                        if ("infos".equals(parser.getName())) {
                            // 解析到了全局开始标签。
                            weatherinfos = new ArrayList<WeatherInfo>();
                        } else if ("city".equals(parser.getName())) {
                            weatherinfo = new WeatherInfo();
                            // 得到id
                            String id = parser.getAttributeValue(0);
                            weatherinfo.setId(Integer.parseInt(id));
                        } else if ("temp".equals(parser.getName())) {
                            String temp = parser.nextText();
                            weatherinfo.setTemp(temp);
                        } 
                        break;
    
                    case XmlPullParser.END_TAG:
                        if ("city".equals(parser.getName())) {
                            // 一个城市的信息处理完毕。
                            weatherinfos.add(weatherinfo);
                            weatherinfo = null;
                        }
    
                        break;
    
                    }
    
                    type = parser.next();
                }

    xml的解析后,我们还要保存它的值,所以我就把每次xml解析后的值,放到集合中,

    这里要注意几点,

    parser.getAttributeValue(0);是得到标签中的id值。
    每解析完一次后,我们要把循环往下走,所以
    type = parser.next();

     这样我们就可以解析出xml中的数据了。

     

    作者:Darren

    微博:@IT_攻城师

    出处:http://www.cnblogs.com/fengtengfei/

  • 相关阅读:
    第十五周翻译
    数据库 第十五周学习笔记
    第十四周学习笔记
    SQL Server安全级别2的楼梯:身份验证
    第十三周学习笔记
    第十三周翻译:SQL Server的安全1级楼梯:SQL Server安全概述
    MySQL修改默认存储引擎(转)
    【整理】MySQL引擎(转)
    合理配置MySQL缓存 提高缓存命中率(转)
    MySQL数据库分区的概念与2大好处
  • 原文地址:https://www.cnblogs.com/fengtengfei/p/3970125.html
Copyright © 2011-2022 走看看