android 使用pull 模式解析 xml文件

android 使用pull 方式解析 xml文件

1、创建一个.xml 文件,用来描述事物的信息:computer.xml 

<?xml version="1.0" encoding="UTF-8"?>
<infos>  
    <computer id="1">  
        <name>华硕</name>  
        <price>3500</price>  
    </computer>  
    <computer id="2">  
        <name>联想</name>  
        <price>3900</price>  
    </computer>  
</infos> 

2、创建一个相应的java bean 文件  

package com.example.bean;

public class Computer {
    private int id;
    private String name;
    private float price;

    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 float getPrice() {
        return price;
    }

    public void setPrice(float price) {
        this.price = price;
    }

    @Override
    public String toString() {
        return this.id + ":" + this.name + ":" + this.price;
    }
}
3、定义一个工具类用来解析.xml 文件

package com.example.util;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import org.xmlpull.v1.XmlPullParser;

import android.util.Xml;

import com.example.bean.Computer;

public class MyXmlPull {

    public static List<Computer> getComputersInfo(InputStream inputStream) throws Exception {
        List<Computer> list = null;
        Computer computer = null;
        XmlPullParser parser = Xml.newPullParser();
        parser.setInput(inputStream, "UTF-8"); // 设置输入流
        int event = parser.getEventType();// 取得操作事件
        while (event != XmlPullParser.END_DOCUMENT) {
            switch (event) {
            case XmlPullParser.START_DOCUMENT:// 开始文档
                list = new ArrayList<Computer>();// 初始化list集合
                break;
            case XmlPullParser.START_TAG:// 开始标签
                if ("computer".equals(parser.getName())) {// 判断开始标签元素是否是computer
                    computer = new Computer();
                    computer.setId(Integer.parseInt(parser.getAttributeValue(0)));// 得到computer标签的属性值,并设置computer的id
                }
                if (computer != null) {
                    if ("name".equals(parser.getName())) {// 判断开始标签元素是否是name
                        computer.setName(parser.nextText());
                    } else if ("price".equals(parser.getName())) {// 判断开始标签元素是否是price
                        computer.setPrice(Float.parseFloat(parser.nextText()));
                    }
                }
                break;
            case XmlPullParser.END_TAG:// 判断当前事件是否是标签元素结束事件
                if ("computer".equals(parser.getName())) {// 判断结束标签元素是否是computer
                    list.add(computer);// 将computer添加到list集合
                    computer = null;
                }
                break;
            }
            event = parser.next();// 进入下一个元素并触发相应事件
        }
        return list;
    }
}
4、在程序中调用:

package com.example.layout;

import java.util.List;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.LinearLayout;

import com.example.bean.Computer;
import com.example.util.MyXmlPull;

public class MainActivity extends Activity {
    private LinearLayout line1 = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        line1 = (LinearLayout) this.findViewById(R.id.line1);
        Button btn = new Button(this);
        btn.setText("点击");
        line1.addView(btn, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        btn.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                try {

                    List<Computer> list = MyXmlPull.getComputersInfo(getClass().getClassLoader().getResourceAsStream("computer.xml"));

                    for (Computer c : list) {
                        Log.i("mark", c.toString());
                    }
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        });
    }

}

note:本程序中的computer.xml 是放置在src 的根目录下