android解析XML常见的有三种Pull、SAX、Dom三种方式。
最常使用是Pull,Android工程本身解析XML也是用的Pull。
Pull是一个开源项目,其官方网站是:http://xmlpull.org/。
在Android工程中已经集成了Pull项目,可以直接使用。


新建一个Android工程。


一 添加测试文件

在res目录下新建一个raw文件夹,在其中添加文件persons.xml, 内容如下:

<?xml version="1.0" encoding="UTF-8"?><persons>    <person id ="1010">        <name>A</name>        <age>10</age>    </person>    <person id ="1111">        <name>B</name>        <age>11</age>    </person></persons>

二 布局
打开main.xml修改内容如下:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical"    android:layout_width="fill_parent"    android:layout_height="fill_parent">    <TextView android:layout_width="fill_parent"        android:layout_height="fill_parent"        android:id="@+id/content" /></LinearLayout>

用于显示从xml中解析出来的数据。


三 添加实体类
新建一个Person类,保存读出来的数据,类容如下:

public class Person {    private Integer id;    private String name;    private Integer age;    public void setId(Integer id) {        this.id = id;    }    public void setAge(Integer age) {        this.age = age;    }    public void setName(String name) {        this.name = name;    }    public Integer getId() {        return id;    }    public String getName() {        return name;    }    public Integer getAge() {        return age;    }    @Override    public String toString() {        return "Person{" +                "id=" + id +                ", name='" + name + '\'' +                ", age=" + age +                '}';    }}

四 功能实现
新建一个类PersonService,用于解析XML,完整代码如下:

public class PersonService {    /**     * 获取对象列表     *     * @param inStream xml文件输入流     * @return 对象列表     * @throws Exception     */    public List<Person> getPersons(InputStream inStream) throws Exception {        XmlPullParser parser = Xml.newPullParser();        try {            parser.setInput(inStream, "UTF-8");            int eventType = parser.getEventType();            Person currentPerson = null;            List<Person> persons = null;            while (eventType != XmlPullParser.END_DOCUMENT) {                switch (eventType) {                    case XmlPullParser.START_DOCUMENT:  // 文档开始事件,可以进行数据初始化处理                        persons = new ArrayList<Person>();                        break;                    case XmlPullParser.START_TAG:       //开始读取某个标签                        //通过getName判断读到哪个标签,然后通过nextText()获取文本节点值,或通过getAttributeValue(i)获取属性节点值                        if (parser.getName().equalsIgnoreCase("person")) {                            currentPerson = new Person();                            currentPerson.setId(new Integer(parser.getAttributeValue(null, "id")));                        }                        else if (currentPerson != null) {                            String name = parser.getName();                            if (parser.getName().equalsIgnoreCase("name")) {                                currentPerson.setName(parser.nextText());// 如果后面是Text元素,即返回它的值                            } else if (name.equalsIgnoreCase("age")) {                                currentPerson.setAge(new Integer(parser.nextText()));                            }                        }                        break;                    case XmlPullParser.END_TAG:// 结束元素事件                        if (parser.getName().equalsIgnoreCase("person") && currentPerson != null) {                            persons.add(currentPerson);                            currentPerson = null;                        }                        break;                }                eventType = parser.next();            }            inStream.close();            return persons;        }        catch (Exception e) {            e.printStackTrace();        }        return null;    }}

五 测试代码
修改MainActivity.java代码如下:

    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        try {            // 测试用:读取文件内容            // String str = "xml文件内容:\n";            // str += this.read("person.xml");            InputStream xml = getResources().openRawResource(R.raw.persons);            String str = "xml文件内容:\n";            PersonService service = new PersonService();            List<Person> persons = service.getPersons(xml);            for(Person person :persons) str = str + person.toString() + "\n";            xml.close();            TextView textView = (TextView)findViewById(R.id.content);            textView.setText(str);        }        catch (Exception e){            e.printStackTrace();        }    }    public String read(String name) throws  Exception{        InputStream is = getResources().openRawResource(R.raw.persons);        ByteArrayOutputStream os = new ByteArrayOutputStream();        byte[] buf = new byte[1024];        int len = 0;        while( (len = is.read(buf)) != -1){            os.write(buf,0, len);        }        byte[] data = os.toByteArray();        String content = new String(data);        return  content;    }

六 运行结果
如图:





更多相关文章

  1. PHP开发Android应用程序
  2. Android(安卓)file类使用详解-SDcard
  3. 一个android工程的运行过程
  4. Android(安卓)R文件丢失解决办法
  5. android中下载文件到sdcard和进度条小结
  6. Android(安卓)init.rc文件解析过程分析
  7. android 开发布局之RelativeLayout
  8. Android(安卓)Jni代码示例讲解
  9. AndroidManifest.xml文件详解

随机推荐

  1. Android bluetooth介绍(一):基本概念及硬件
  2. android压力测试命令monkey详解
  3. Android中的Activity四种启动模式(launch
  4. 打电话的应用程序源码以及Android基础---
  5. Android include标签
  6. Android 4.4 KitKat NotificationManager
  7. Android SDK Manager在添加Platforms和其
  8. Android图形 - Bitmap
  9. Android Test Case在JUNIT下的应用
  10. 关于 Android 异步消息处理机制 Handler