android_14_XmlPullParser解析XML文件

来源:互联网 发布:绝世唐门进阶数据 编辑:程序博客网 时间:2024/06/05 12:46

效果:



XML文件(位于Src目录,即Main Bundle):

<?xml version='1.0' encoding='utf-8' standalone='yes' ?><weather><city><name>杭州</name><temp>8度</temp><pm>250</pm></city><city><name>厦门</name><temp>18度</temp><pm>25</pm></city><city><name>昆明</name><temp>15度</temp><pm>35</pm></city></weather>



City模型:

package com.sg31.xmlpullparser;public class City {// 城市名private String name;// 温度private String temp;// pm2.5或者pm10private String pm;public String getName() {return name;}public void setName(String name) {this.name = name;}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;}@Overridepublic String toString() {return "City [name=" + name + ", temp=" + temp + ", pm=" + pm + "]";}}




代码:

package com.sg31.xmlpullparser;import java.io.InputStream;import java.util.ArrayList;import java.util.List;import org.xmlpull.v1.XmlPullParser;import android.support.v7.app.ActionBarActivity;import android.os.Bundle;import android.util.Xml;import android.view.Menu;import android.view.MenuItem;public class MainActivity extends ActionBarActivity {List<City> cityList;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);                pullParserToHandleWithXML();    }    @Override    public boolean onCreateOptionsMenu(Menu menu) {        // Inflate the menu; this adds items to the action bar if it is present.        getMenuInflater().inflate(R.menu.main, menu);        return true;    }    @Override    public boolean onOptionsItemSelected(MenuItem item) {        // Handle action bar item clicks here. The action bar will        // automatically handle clicks on the Home/Up button, so long        // as you specify a parent activity in AndroidManifest.xml.        int id = item.getItemId();        if (id == R.id.action_settings) {            return true;        }        return super.onOptionsItemSelected(item);    }        // 使用XmlPullParser解析XML文件    public void pullParserToHandleWithXML(){        //获取到src文件夹下的资源文件(File In Main Bundle)        InputStream is = getClassLoader().getResourceAsStream("weather.xml");                //拿到pull解析器对象        XmlPullParser xp = Xml.newPullParser();        //初始化        try {            xp.setInput(is, "utf-8");                        // 核心思想:获取当前节点的 事件类型,通过 事件类型 的判断,我们可以知道当前节点是什么节点,从而确定我们应该做什么操作            int type = xp.getEventType();            City city = null;            // 只要不是文档结束 结点            while(type != XmlPullParser.END_DOCUMENT){                //根据节点的类型,要做不同的操作                switch (type) {                    case XmlPullParser.START_TAG:                        //获取当前节点的名字                        if("weather".equals(xp.getName())){                            //初始化city集合对象,用于存放city的javabean                            cityList = new ArrayList<City>();                        }                        else if("city".equals(xp.getName())){                            // 开始创建一个city的javabean对象                            city = new City();                        }                        else if("name".equals(xp.getName())){                            //获取当前节点的下一个节点的文本                            String name = xp.nextText();                            city.setName(name);                        }                        else if("temp".equals(xp.getName())){                            //获取当前节点的下一个节点的文本                            String temp = xp.nextText();                            city.setTemp(temp);                        }                        else if("pm".equals(xp.getName())){                            //获取当前节点的下一个节点的文本                            String pm = xp.nextText();                            city.setPm(pm);                        }                        break;                    // 结束结点判断                        case XmlPullParser.END_TAG:                        if("city".equals(xp.getName())){                            //把一个填充好的city的javabean放到集合中                            cityList.add(city);                        }                        break;                                        }                                //把指针移动到下一个节点,并返回该节点的事件类型                type = xp.next();            }            // 显示解析成果            for (City c : cityList) {                System.out.println(c.toString());            }        } catch (Exception e) {            e.printStackTrace();        }    }}




1 0