Android笔记使用Pull解析器读取XML文件

除了可以使用SAX或DOM解析XML文件之外,大家也可以使用Android内置的Pull解析器解析XML文件。 Pull解析器是一个开源的java项目,既可以用于android,也可以用于JavaEE。如果用在javaEE需要把其jar文件放入类路径中,因为Android已经集成进了Pull解析器,所以无需添加任何jar文件。android系统本身使用到的各种xml文件,其内部也是采用Pull解析器进行解析的。Pull解析器的运行方式与SAX解析器相似。它提供了类似的事件,如:开始元素和结束元素事件,使用parser.next()可以进入下一个元素并触发相应事件。跟SAX不同的是,Pull解析器产生的事件是一个数字,而非方法,因此可以使用一个switch对感兴趣的事件进行处理。当元素开始解析时,调用parser.nextText()方法可以获取下一个Text类型节点的值。


MainActivity.java

public class MainActivity extends ActionBarActivity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		TextView tv = (TextView) findViewById(R.id.tv);

		try {
			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());
		} catch (Exception e) {
			e.printStackTrace();
			Toast.makeText(this, "解析信息失败!", 0).show();
		}

	}

}
WeatherInfo.java

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 + ", pm2.5=" + 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;
	}
    
    
	
}

WeatherService.java

public class WeatherService {
	
	public static  List<WeatherInfo> getWeatherInfos(InputStream is) throws Exception{
			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;
					}
					break;
				}
				
				type=parser.next();
			}
			return weatherInfos;
	}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值