首页 > 代码库 > Android开发pool解析xml
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/
Android开发pool解析xml