在上文中介绍了使用sax方式解析xml,这里介绍下在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文件:student.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;//构建XmlPullParserFactorytry {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://判断如果其实节点为studentif("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)){//设置namestudent.setName(xmlPullParser.nextText());}else if("sex".equals(nodeName)){//设置sexstudent.setSex(xmlPullParser.nextText());}else if("age".equals(nodeName)){//设置agestudent.setAge(Integer.parseInt(xmlPullParser.nextText()));}else if("email".equals(nodeName)){//设置emailstudent.setEmail(xmlPullParser.nextText());}else if("birthday".equals(nodeName)){//设置birthdaystudent.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文件则会报以下异常信息:

http://www.fengfly.com/plus/view-190679-1.html原文地址有源码下载

更多相关文章

  1. eclispe 更新sdk Connection to https://dl-ssl.google.com refu
  2. android之 ExpandableListView的使用
  3. Android笔记(2)sqlite的用法
  4. Android(安卓)Selinux 权限处理
  5. android 状态栏一体化实现
  6. Android(安卓)-- 系统结构 /system/ 目录下文件夹功能说明
  7. Android(安卓)listview子控件的的点击事件
  8. (Android(安卓)Studio)添加按钮以及权重问题
  9. Android多线程断点续传详解与案例

随机推荐

  1. android基础(开发环境搭建)
  2. 在 Android(安卓)Studio 上调试数据库 (
  3. Android Studio 启用Lambda表达式
  4. android SDK编译版本修改
  5. Android开发小技巧1
  6. Android: TextView with border 带边框的
  7. android studio常见错误及异常处理记录
  8. android连接网络
  9. ANDROID笔记:Button的简单使用
  10. Android 唤醒锁