Android解析XML文件

在Android中解析xml文件为我们提供了一个非常容易的工具XmlPullParser接口

测试使用的XML文件内容:

<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
<infos>
<city id="1">
 <temp>20C/30C</temp>
 <weather>5月20日 多云转阴</weather>
 <wind>南风3-4级</wind>
 <name>上海</name>
 <pm>200</pm>
</city>
<city id="2">
 <temp>23C/25C</temp>
 <weather>5月20日 多云转阴</weather>
 <wind>南风1-2级</wind>
 <name>四川</name>
 <pm>50</pm>
</city>
<city id="3">
 <temp>6C/23C</temp>
 <weather>5月20日 多云转阴</weather>
 <wind>南风6-7级</wind>
 <name>北京</name>
 <pm>800</pm>
</city>
<city id="4">
 <temp>26C/34C</temp>
 <weather>5月20日 多云转阴</weather>
 <wind>南风7-7级</wind>
 <name>哈尔滨</name>
 <pm>100</pm>
</city>
</infos>

解析XML文件方法

public static List<WeatherInfos> getWeatherInfos(InputStream is) throws Exception{
 //创建集合
 List<WeatherInfos> weatherInfos=null;
 //创建XmlPullParser对象
 XmlPullParser parser=Xml.newPullParser();
 //初始化解析器
 parser.setInput(is,"UTF-8");
 //获取当前事件类型
 int type=parser.getEventType();
 WeatherInfos weatherInfo=null;
 while(type!=XmlPullParser.END_DOCUMENT){
  switch (type) {
  case XmlPullParser.START_TAG:
   if("infos".equals(parser.getName())){
    weatherInfos=new ArrayList<WeatherInfos>();
   }else if("city".equals(parser.getName())){
    weatherInfo=new WeatherInfos();
    String id=parser.getAttributeValue(0);
    weatherInfo.setId(Integer.parseInt(id));
   }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;
}

在主方法中获取集合并将信息设置到TextView中:

tvWeather=(TextView) findViewById(R.id.tv_weather);
 //获取集合
 try {
  List<WeatherInfos> weatherInfos=WeatherService.getWeatherInfos(MainActivity.this.getClassLoader().getResourceAsStream("back.xml"));
  //创建StringBuffer对象
  StringBuffer sb=new StringBuffer();
  //遍历集合
  for(WeatherInfos info:weatherInfos){
   sb.append("编号:"+info.getId());
   sb.append("\n城市名称:"+info.getName());
   sb.append("\n温度:"+info.getTemp());
   sb.append("\n空气指数:"+info.getPm());
   sb.append("\n天气:"+info.getWeather());
   sb.append("\n风力:"+info.getWind());
   sb.append("\n\n");
  }
  //将信息设置到TextView对象中
  tvWeather.setText(sb.toString());
 } catch (Exception e) {
  e.printStackTrace();
 }

这样就实现了Android解析Xml文件

你可能感兴趣的:(解析xml文件)