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

来源:互联网 发布:我的世界0.14.0JS大全 编辑:程序博客网 时间:2024/05/20 05:06

除了可以使用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 {@Overrideprotected 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;                    @Overridepublic 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;}}


0 0