xmlpull 解析 xml 的简单实例

来源:互联网 发布:json(",")什么意思 编辑:程序博客网 时间:2024/05/17 00:07
在上文中介绍了使用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文件:

<?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

效果图: