Pull解析Xml文件

原创 2015年11月19日 09:37:22

今天给大家分享一下如何用Pull解析器解析Xml文件,下面以解析一个天气预报的信息为例大笑

           Pull解析器是Android本身自带的一个解析器,而且Android里面也有很多的Xml文件,同样也是用Pull解析器来解析的,Pull解析的机制和SAX解析很相似,都是基于事件的解析,不同的是Pull解析产生的是一个数字不是方法,下面来具体介绍一下Pull解析

          一、Xml文件源码(天气信息)

<?xml version="1.0" encoding="utf-8"?>
<infos>
<city id="1">
<temp>23℃/30℃</temp>
<weather>5月20日 多云转阴</weather>
<wind>南风3-4级</wind>
<name>上海</name>
<pm>200</pm>
</city>
<city id="2">
<temp>23℃/30℃</temp>
<weather>5月20日 多云转阴</weather>
<wind>南风3-4级</wind>
<name>北京</name>
<pm>200</pm>
</city>
<city id="3">
<temp>23℃/30℃</temp>
<weather>5月20日 多云转阴</weather>
<wind>南风3-4级</wind>
<name>哈尔滨</name>
<pm>200</pm>
</city>
</infos>


二、天气信息的获取

因为在做天气预报的信息获取时,我们往往是直接从天气预报的网上暴露出的接口来获取的,下面我们把信息直接写在本地上

根据Xml文件可以看到有很多类型的信息,我们先定义后,再生成Getter和Setter方法,最后再生成toString的方法,因为最后我们需要显示在Textview上。

public class WeatherInfo {
private int id;
private String name;
private String wind;
private String weather;
private String temp;
private String pm;


@Override
public String toString() {
return " [城市id=" + id + ", 名称=" + name + ", 风力=" + wind
+ ", 天气=" + weather + ", 温度=" + temp + ", 雾霾=" + pm
+ "]";
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getWind() {
return wind;
}
public void setWind(String wind) {
this.wind = wind;
}
public String getWeather() {
return weather;
}
public void setWeather(String weather) {
this.weather = weather;
}
public String getTemp() {
return temp;
}
public void setTemp(String temp) {
this.temp = temp;
}
public String getPm() {
return pm;
}
public void setPm(String pm) {
this.pm = pm;
}


三、进行Pull解析

首先我们需要初始化Pull解析器,Pull解析产生的是一个数字,所以我们可以用switch方法来进行解析

XmlPullParser parser = Xml.newPullParser();
// 初始化解析器
parser.setInput(is, "utf-8");
List<WeatherInfo> weatherInfos = null;
WeatherInfo weatherInfo = null;
int type = parser.getEventType();
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();
String idStr = parser.getAttributeValue(0);
weatherInfo.setId(Integer.parseInt(idStr));
} else if ("temp".equals(parser.getName())) {
String temp = parser.nextText();
weatherInfo.setTemp(temp);
} else if ("weather".equals(parser.getName())) {
String weather = parser.nextText();
weatherInfo.setWeather(weather);
} else if ("wind".equals(parser.getName())) {
String wind = parser.nextText();
weatherInfo.setWind(wind);
} else if ("name".equals(parser.getName())) {
String name = parser.nextText();
weatherInfo.setName(name);
} else if ("pm".equals(parser.getName())) {
String pm = parser.nextText();
weatherInfo.setPm(pm);
}
break;
case XmlPullParser.END_TAG:
if ("city".equals(parser.getName())) {
//一个城市的信息已经处理完毕
weatherInfos.add(weatherInfo);
weatherInfo = null;
}
}


type = parser.next();
}
return weatherInfos;


is是一个输入流,然后定义一个int类型的type开始解析。

while (type != XmlPullParser.END_DOCUMENT)表示类型不是Xml输入流的末尾就向下执行。

parser.nextTexy()方法用来获取下一个Text类型节点值。

最后处理完一个城市后再从city节点来说循环。

四、显示天气信息

把xml文件放在str目录下后,通过类加载器来得到xml文件

最后遍历List<Weather Info>就可以得到所有的天气信息啦

List<WeatherInfo> infos = WeatherService.getWeatherInfos(MainActivity.class.getClassLoader()
.getResourceAsStream("weather.xml"));
StringBuffer sb = new StringBuffer();
for(WeatherInfo info: infos){
String str = info.toString();
sb.append(str);
sb.append("\n");
}
tv.setText(sb.toString());
Toast.makeText(this, "解析天气信息成功", Toast.LENGTH_SHORT).show();


版权声明:本文为博主原创文章,未经博主允许不得转载。

Pull解析xml文件

  • 2014年09月10日 15:52
  • 554KB
  • 下载

在android中使用pull解析xml文件

  • 2013年06月22日 23:14
  • 1.18MB
  • 下载

Android中使用PULL方式解析XML文件

Pull解析器的运行方式与 SAX 解析器相似。它提供了类似的事件,如:开始元素和结束元素事件,使用parser.next()可以进入下一个元素并触发相应事件。跟SAX不同的是, Pull解析器产生的...
  • cjjky
  • cjjky
  • 2011年08月07日 23:24
  • 11215

DOM和PULL解析XML文件

  • 2011年09月13日 13:07
  • 37.62MB
  • 下载

android使用pull 解析xml文件源码

  • 2012年03月20日 20:52
  • 45KB
  • 下载

Android开发8——利用pull解析器读写XML文件

一、基本介绍 对XML解析有SAX和DOM等多种方式,Android中极力推荐xmlpull方式解析xml。xmlpull不仅可用在Android上同样也适用于javase,但在javase环境...

DOM4j\pull\dom解析XML文件

  • 2013年12月26日 10:56
  • 130KB
  • 下载

Android 个人学习笔记之--- Pull解析XML文件

1.Pull简介 Pull解析器是Android系统内置的的,Pull解析器与SAX解析器类似,他提供了类似的事件,如开始元素和介绍元素的事件,使用parser.next()可以进入下一个元素并触发相...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Pull解析Xml文件
举报原因:
原因补充:

(最多只允许输入30个字)