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/

  • 相关阅读:
    [转]K/3加密控制规则
    修改Delphi2009的界面风格
    [转]软件版本号讲解: 什么是Alpha, Beta, RC
    百度程序题目连续数问题
    得到正整数a的16进制表示
    四舍五入至某小数位后返回数字串
    返回相同宽度数字型字符串
    百度程序题目连续数问题 另解
    求二进制表示中1的个数
    六支筷子取其二,恰为一双的概率
  • 原文地址:https://www.cnblogs.com/fengtengfei/p/3970125.html
Copyright © 2011-2022 走看看