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/

原文地址:https://www.cnblogs.com/fengtengfei/p/3970125.html