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();


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

xmlPull解析网络数据(xml文件)

private void getXml() { new Thread() { public void run() { tr...
  • xingxiansheng000
  • xingxiansheng000
  • 2016年06月20日 14:15
  • 149

android xml使用pull解析

xml的三种解析方式,DOM,SAX,和Pull
  • u013072976
  • u013072976
  • 2014年11月11日 17:43
  • 691

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

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

【Android】PULL解析XML文件

XML解析三种方式 DOM 通用性强,它会将XML文件的所有内容读取到内存中,然后允许您使用DOM API遍历XML树、检索所需的数据; 简单直观,但需要将文档读取到内存,并不太适合移动设备; ...
  • oYunTaoLianWu
  • oYunTaoLianWu
  • 2013年10月27日 02:08
  • 13787

Android studio 下的 XML pull解析

Android原生系统的XML解析就是用的pull解析。由此我们可以得出两个信号: 1、pull解析肯定有独特的优势,能从dom、sax解析中脱颖而出。 2、我们在使用pull解析时不需要...
  • sinat_29398599
  • sinat_29398599
  • 2016年10月11日 10:46
  • 1519

PULL解析XML文件

PULL解析XML文件常用的XML pull的接口和类: XmlPullParser:该解析器是一个在org.xmlpull.v1中定义的解析功能的接口。 XmlSerializer:它是一个接口,定...
  • u012711313
  • u012711313
  • 2016年01月16日 11:50
  • 133

XML文件Pull解析

public class MainActivity extends Activity { String url = "http://www.oschina.net/MobileAppVers...
  • llx_android
  • llx_android
  • 2016年07月29日 10:17
  • 132

Pull解析XML文件

Android中解析xml文件有很多种方法,今天先介绍下官方推荐的Pull解析方法。 首先看一下这个xml文件: Android开发 123.123 很简单的一个xml,下面试着解析它: ...
  • jielundewode
  • jielundewode
  • 2015年04月20日 09:19
  • 319

Pull解析xml文件

Pull解析和Sax解析很相似,都是轻量级的解析,在Android的内核中已经嵌入了Pull,所以我们不需要再添加第三方jar包来支持Pull。Pull解析和Sax解析不一样的地方有(1)pull读取...
  • rong_wz
  • rong_wz
  • 2013年11月08日 16:16
  • 549

pull解析XML文件

核心代码package com.example.createxml;import android.os.Environment; import android.support.v7.app.Actio...
  • gujianjian6
  • gujianjian6
  • 2015年12月26日 11:34
  • 210
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Pull解析Xml文件
举报原因:
原因补充:

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