Android基础--XML解析(XmlPullParser )

1.要解析的xml文件如下

<?xml version=‘1.0‘ encoding=‘utf-8‘ standalone=‘yes‘ ?>
<weather>
    <city>
        <name>深圳</name>
        <temp>18°</temp>
        <pm25>30</pm25>
    </city>
    <city>
        <name>上海</name>
        <temp>13°</temp>
        <pm25>25</pm25>
    </city>
    <city>
        <name>北京</name>
        <temp></temp>
        <pm25>800</pm25>
    </city>
</weather>

2.每个City节点对应的JavaBean如下:

public class City {

    private String name;
    private String temp;
    private String pm25;
    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 getPm25() {
        return pm25;
    }
    public void setPm25(String pm25) {
        this.pm25 = pm25;
    }
    public City(String name, String temp, String pm25) {
        super();
        this.name = name;
        this.temp = temp;
        this.pm25 = pm25;
    }
    public City() {
        super();
    }
    @Override
    public String toString() {
        return "City [name=" + name + ", temp=" + temp + ", pm25=" + pm25 + "]";
    }
    
    
}

3.进行解析的MainActivity.java如下:

public class MainActivity extends Activity {

    List<City> cityList;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }


    public void click(View v){
        //解析xml文件
        //1. 拿到资源文件
        InputStream is = getClassLoader().getResourceAsStream("weather.xml");
        
        //2. 拿到解析器对象
        XmlPullParser xp = Xml.newPullParser();
        try {
            //3. 初始化xp对象
            xp.setInput(is, "gbk");//根据文件保存的编码决定
            
            //4.开始解析
            //获取当前节点的事件类型
            int type = xp.getEventType();
            City city = null;
            while(type != XmlPullParser.END_DOCUMENT){
                //判断当前解析到哪一个节点,从而确定你要做什么操作
                switch (type) {
                case XmlPullParser.START_TAG:
                    //                    获取当前节点的名字
                    if("weather".equals(xp.getName())){
                        cityList = new ArrayList<City>();
                    }
                    else if("city".equals(xp.getName())){
                        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("pm25".equals(xp.getName())){
                        //                获取当前节点的下一个节点的文本,把指针移动到当前节点的结束节点
                        String pm25 = xp.nextText();
                        city.setPm25(pm25);
                    }
                    break;
                case XmlPullParser.END_TAG:
                    if("city".equals(xp.getName())){
                        cityList.add(city);
                    }
                    break;

                }
                //把指针移动到下一个节点
                type = xp.next();
            }
            
            for (City c : cityList) {
                System.out.println(c.toString());
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    
}

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。