转自:http://www.blogjava.net/sxyx2008/archive/2010/08/04/327885.html

介绍下在Android中极力推荐的xmlpull方式解析xml。xmlpull不仅仅可以使用在Android上,同样也适用于javase,但在javase环境下,你需要自己去获取xmlpull所依赖的类库。
        环境:

kxml2-2.3.0.jar

xmlpull_1_1_3_4c.jar

以上两个jar分别从以下网站下载:

http://www.xmlpull.org/    xmlpull

http://kxml.sourceforge.net/    kxml

xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <student id="1" group="1">
        <name>张三</name>
        <sex>男</sex>
        <age>18</age>
        <email>zhangsan@163.com</email>
        <birthday>1987-06-08</birthday>
        <memo>好学生</memo>
    </student>
    <student id="2" group="2">
        <name>李四</name>
        <sex>女</sex>
        <age>18</age>
        <email>lisi@163.com</email>
        <birthday>1987-06-08</birthday>
        <memo>好学生</memo>
    </student>
    <student id="3" group="3">
        <name>小王</name>
        <sex>男</sex>
        <age>18</age>
        <email>xiaowang@163.com</email>
        <birthday>1987-06-08</birthday>
        <memo>好学生</memo>
    </student>
    <student id="4" group="4">
        <name>小张</name>
        <sex>男</sex>
        <age>18</age>
        <email>xiaozhang@163.com</email>
        <birthday>1987-06-08</birthday>
        <memo>好学生</memo>
    </student>
    <student id="5" group="5">
        <name>小明</name>
        <sex>男</sex>
        <age>18</age>
        <email>xiaoming@163.com</email>
        <birthday>1987-06-08</birthday>
        <memo>好学生</memo>
    </student>
</root>

Xml对应的实体bean文件:

package com.parsexml.entity;

public class Student {
    
    private int id;
    private int group;
    private String name;
    private String sex;
    private int age;
    private String email;
    private String memo;
    private String birthday;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public int getGroup() {
        return group;
    }
    public void setGroup(int group) {
        this.group = group;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    public String getMemo() {
        return memo;
    }
    public void setMemo(String memo) {
        this.memo = memo;
    }
    public String getBirthday() {
        return birthday;
    }
    public void setBirthday(String birthday) {
        this.birthday = birthday;
    }
    
}

Pull解析代码

package com.parsexml;

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

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;

import com.parsexml.entity.Student;

public class PullParseXml {
    
    
    public List<Student> PullParseXML(){
        
        List<Student> list=null;
        Student student = null;
        
        //构建XmlPullParserFactory
        try {
            XmlPullParserFactory pullParserFactory=XmlPullParserFactory.newInstance();
            //获取XmlPullParser的实例
            XmlPullParser xmlPullParser=pullParserFactory.newPullParser();
            //设置输入流  xml文件
            xmlPullParser.setInput(Thread.currentThread().getContextClassLoader().getResourceAsStream("Student.xml"), "UTF-8");
            
            //开始
            int eventType=xmlPullParser.getEventType();
            
            try {
                while(eventType!=XmlPullParser.END_DOCUMENT){
                    String nodeName=xmlPullParser.getName();
                    switch (eventType) {
                    //文档开始
                    case XmlPullParser.START_DOCUMENT:
                        list=new ArrayList<Student>();
                        break;
                    //开始节点
                    case XmlPullParser.START_TAG:
                        //判断如果其实节点为student
                        if("student".equals(nodeName)){
                            //实例化student对象
                            student=new Student();
                            //设置Id属性
                            student.setId(Integer.parseInt(xmlPullParser.getAttributeValue(0)));
                            //设置Group属性
                            student.setGroup(Integer.parseInt(xmlPullParser.getAttributeValue(1)));
                        }else if("name".equals(nodeName)){
                            //设置name
                            student.setName(xmlPullParser.nextText());
                        }else if("sex".equals(nodeName)){
                            //设置sex
                            student.setSex(xmlPullParser.nextText());
                        }else if("age".equals(nodeName)){
                            //设置age
                            student.setAge(Integer.parseInt(xmlPullParser.nextText()));
                        }else if("email".equals(nodeName)){
                            //设置email
                            student.setEmail(xmlPullParser.nextText());
                        }else if("birthday".equals(nodeName)){
                            //设置birthday
                            student.setBirthday(xmlPullParser.nextText());
                        }else if("memo".equals(nodeName)){
                            //设置memo属性
                            student.setMemo(xmlPullParser.nextText());
                        }
                        break;
                    //结束节点
                    case XmlPullParser.END_TAG:
                        if("student".equals(nodeName)){
                            list.add(student);
                            student=null;
                        }
                        break;
                    default:
                        break;
                    }
                    eventType=xmlPullParser.next();
                }
            } catch (NumberFormatException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        } catch (XmlPullParserException e) {
            e.printStackTrace();
        }

return list;
    }
    
    public static void main(String[] args) {
        List<Student> list=new PullParseXml().PullParseXML();
        for(Student student:list){
            System.out.println("id:"+student.getId()+"\tgroup:"+student.getGroup()+"\tname:"+student.getName()+"\tsex:"+student.getSex()+"\tage:"+student.getAge()+"\temail:"+student.getEmail()+"\tbirthday:"+student.getBirthday()+"\tmemo:"+student.getMemo());
        }
    }
    
}

注:若工程中缺少kxml2-2.3.0.jar文件则会报以下异常信息:

你应该添加kxml2-2.3.0.jar包到你的classpath下

效果图:

点我下载demo

Android之使用XMLPull解析xml(二)的更多相关文章

  1. android 67 生成和解析xml

    生成xml: package com.itheima.createxml; import java.io.File; import java.io.FileNotFoundException; imp ...

  2. android 生成、pull解析xml文件

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools= ...

  3. Android--使用XMLPull解析xml

    在Android中极力推荐的xmlpull方式解析xml.xmlpull不只能够使用在Android上.相同也适用于javase,但在javase环境下.你须要自己去获取xmlpull所依赖的类库. ...

  4. Android中三种常用解析XML的方式(DOM、SAX、PULL)简介及区别

    XML在各种开发中都广泛应用,Android也不例外.作为承载数据的一个重要角色,如何读写XML成为Android开发中一项重要的技能.今天就由我向大家介绍一下在Android平台下几种常见的XML解 ...

  5. Android 使用pull,sax解析xml

    pull解析xml文件 1.获得XmlpullParser类的引用 这里有两种方法 //解析器工厂 XmlPullParserFactory factory=XmlPullParserFactory. ...

  6. Android 生成和Pull解析xml

    一.单个对象生成xml 生成以下xml,该怎么生成呢? <?xml version='1.0' encoding='UTF-8' standalone='yes' ?> <accou ...

  7. android使用XmlPullParser来解析XML文件

    解析下面的一个XML: <?xml version="1.0" encoding="utf-8" ?> <rss><sid> ...

  8. Android Data Binding语法解析(二)

    上篇我们知道了Data Binding的最简单的用法,那么Data Binding其中最为重要也是最复杂的其实就是在xml布局文件中给对应的控件进行数据绑定了,接下来就一一说明Data Binding ...

  9. Android媒体扫描详细解析之二(MediaScanner & MediaProvider)

    上篇blog说到了经过对文件夹进行扫描如果后缀符合系统设定的一些格式,那么就会进行文件内容扫描下面我们紧接着STEP 14中的 status_t StagefrightMediaScanner::pr ...

随机推荐

  1. Android Activity、Service、BroadcastReceiver 的生命周期

    Activity.Service.BroadcastReceiver这三个组建是Android开发中最常使用到的组件,在它们的生命周期的各个阶段我们需要针对性的做些事情,了解这些组件的生命周期有利于我 ...

  2. java8 - 3

    import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.functio ...

  3. STL容器读书笔记

    vector vector维护的是一个连续线性空间 vector是动态空间,随着元素的加入会自动扩容,扩充至当前size的两倍,然后将原内容拷贝,开始在原内容之后构造新元素,并释放空间 vector提 ...

  4. js 参数传递

    最近在读<javascript高级程序设计>时碰到了js传递方式的问题,花费了些时间,不过总算明白了. 数据类型 在 javascript 中数据类型可以分为两类: 基本类型值 primi ...

  5. C#中 EF(EntityFramework) 性能优化

    现在工作中很少使用原生的sql了,大多数的时候都在使用EF.刚开始的时候,只是在注重功能的实现,最近一段时间在做服务端接口开发.开发的时候也是像之前一样,键盘噼里啪啦的一顿敲,接口秒秒钟上线,但是到联 ...

  6. CSUOJ 1826 Languages map+stringstream

    Description The Enterprise has encountered a planet that at one point had been inhabited. The onlyre ...

  7. Java 中线程安全问题

    不好意思,一个国庆假期给我放的都不知道东西南北了,放松,很放松,差一点就弃更了,感谢那些催更的小伙伴们! 虽然没有更新,但是日常的学习还是有的,以后我尽量给大家分享一些通用知识,非技术. 但是本期还是 ...

  8. 用Python开始机器学习(3:数据拟合与广义线性回归)

    机器学习中的预测问题通常分为2类:回归与分类. 简单的说回归就是预测数值,而分类是给数据打上标签归类. 本文讲述如何用Python进行基本的数据拟合,以及如何对拟合结果的误差进行分析. 本例中使用一个 ...

  9. 深入理解ajax系列第三篇

    前面的话 我们接收到的响应主体类型可以是多种形式的,包括字符串String.ArrayBuffer对象.二进制Blob对象.JSON对象.javascirpt文件及表示XML文档的Document对象 ...

  10. 使用gSOAP工具生成onvif框架代码

    <工具产生背景>          由于SOAP是一种基于xml的文件,手动编写SOAP文件太机械耗时,在这种背景下产生了gSAOP 这个工具,用于生成各种类型的代码,目前支持C/C++, ...