转自: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文件:

<?xmlversion="1.0"encoding="UTF-8"?>
<root>
<studentid="1"group="1">
<name>张三</name>
<sex>男</sex>
<age>18</age>
<email>zhangsan@163.com</email>
<birthday>1987-06-08</birthday>
<memo>好学生</memo>
</student>
<studentid="2"group="2">
<name>李四</name>
<sex>女</sex>
<age>18</age>
<email>lisi@163.com</email>
<birthday>1987-06-08</birthday>
<memo>好学生</memo>
</student>
<studentid="3"group="3">
<name>小王</name>
<sex>男</sex>
<age>18</age>
<email>xiaowang@163.com</email>
<birthday>1987-06-08</birthday>
<memo>好学生</memo>
</student>
<studentid="4"group="4">
<name>小张</name>
<sex>男</sex>
<age>18</age>
<email>xiaozhang@163.com</email>
<birthday>1987-06-08</birthday>
<memo>好学生</memo>
</student>
<studentid="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文件:

packagecom.parsexml.entity;

publicclassStudent{

privateintid;
privateintgroup;
privateStringname;
privateStringsex;
privateintage;
privateStringemail;
privateStringmemo;
privateStringbirthday;
publicintgetId(){
returnid;
}
publicvoidsetId(intid){
this.id=id;
}
publicintgetGroup(){
returngroup;
}
publicvoidsetGroup(intgroup){
this.group=group;
}
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicStringgetSex(){
returnsex;
}
publicvoidsetSex(Stringsex){
this.sex=sex;
}
publicintgetAge(){
returnage;
}
publicvoidsetAge(intage){
this.age=age;
}
publicStringgetEmail(){
returnemail;
}
publicvoidsetEmail(Stringemail){
this.email=email;
}
publicStringgetMemo(){
returnmemo;
}
publicvoidsetMemo(Stringmemo){
this.memo=memo;
}
publicStringgetBirthday(){
returnbirthday;
}
publicvoidsetBirthday(Stringbirthday){
this.birthday=birthday;
}

}

Pull解析代码

packagecom.parsexml;

importjava.io.IOException;
importjava.util.ArrayList;
importjava.util.List;

importorg.xmlpull.v1.XmlPullParser;
importorg.xmlpull.v1.XmlPullParserException;
importorg.xmlpull.v1.XmlPullParserFactory;

importcom.parsexml.entity.Student;

publicclassPullParseXml{


publicList<Student>PullParseXML(){

List<Student>list=null;
Studentstudent=null;

//构建XmlPullParserFactory
try{
XmlPullParserFactorypullParserFactory=XmlPullParserFactory.newInstance();
//获取XmlPullParser的实例
XmlPullParserxmlPullParser=pullParserFactory.newPullParser();
//设置输入流xml文件
xmlPullParser.setInput(Thread.currentThread().getContextClassLoader().getResourceAsStream("Student.xml"),"UTF-8");

//开始
inteventType=xmlPullParser.getEventType();

try{
while(eventType!=XmlPullParser.END_DOCUMENT){
StringnodeName=xmlPullParser.getName();
switch(eventType){
//文档开始
caseXmlPullParser.START_DOCUMENT:
list=newArrayList<Student>();
break;
//开始节点
caseXmlPullParser.START_TAG:
//判断如果其实节点为student
if("student".equals(nodeName)){
//实例化student对象
student=newStudent();
//设置Id属性
student.setId(Integer.parseInt(xmlPullParser.getAttributeValue(0)));
//设置Group属性
student.setGroup(Integer.parseInt(xmlPullParser.getAttributeValue(1)));
}elseif("name".equals(nodeName)){
//设置name
student.setName(xmlPullParser.nextText());
}elseif("sex".equals(nodeName)){
//设置sex
student.setSex(xmlPullParser.nextText());
}elseif("age".equals(nodeName)){
//设置age
student.setAge(Integer.parseInt(xmlPullParser.nextText()));
}elseif("email".equals(nodeName)){
//设置email
student.setEmail(xmlPullParser.nextText());
}elseif("birthday".equals(nodeName)){
//设置birthday
student.setBirthday(xmlPullParser.nextText());
}elseif("memo".equals(nodeName)){
//设置memo属性
student.setMemo(xmlPullParser.nextText());
}
break;
//结束节点
caseXmlPullParser.END_TAG:
if("student".equals(nodeName)){
list.add(student);
student=null;
}
break;
default:
break;
}
eventType=xmlPullParser.next();
}
}catch(NumberFormatExceptione){
e.printStackTrace();
}catch(IOExceptione){
e.printStackTrace();
}
}catch(XmlPullParserExceptione){
e.printStackTrace();
}

returnlist;
}

publicstaticvoidmain(String[]args){
List<Student>list=newPullParseXml().PullParseXML();
for(Studentstudent: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

更多相关文章

  1. NPM 和webpack 的基础使用
  2. 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程
  3. Android中手机震动的设置(Vibrator)的步骤(Android学习随笔三)
  4. Mac电脑开发Android(安卓)app如何连接真机
  5. 通过xml布局文件实现按钮改变焦点设置背景图片
  6. Android实现简单字符驱动程序及测试
  7. Android(安卓)布局
  8. Android(安卓)数据存储(二) 文件的使用
  9. [Android(安卓)源码] Android源码下载

随机推荐

  1. Android(安卓)API Level对应Android版本
  2. Android(安卓)SDK Android(安卓)NDK 官方
  3. Android(安卓)Animation无限循环动画
  4. Android中设置activity的background为Wal
  5. Android(安卓)内核/框架结构学习笔记
  6. android:versionCode="1"与android:versi
  7. 25个Android酷炫开源UI框架
  8. Android(安卓)TextEdit 文本框设置
  9. Android(安卓)备忘录
  10. Android(安卓)SDK Android(安卓)NDK 官方