使用xmlpull解析xml

在上文中介绍了使用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>[email protected]</email>
		<birthday>1987-06-08</birthday>
		<memo>好学生</memo>
	</student>
	<student id="2" group="2">
		<name>李四</name>
		<sex>女</sex>
		<age>18</age>
		<email>[email protected]</email>
		<birthday>1987-06-08</birthday>
		<memo>好学生</memo>
	</student>
	<student id="3" group="3">
		<name>小王</name>
		<sex>男</sex>
		<age>18</age>
		<email>[email protected]</email>
		<birthday>1987-06-08</birthday>
		<memo>好学生</memo>
	</student>
	<student id="4" group="4">
		<name>小张</name>
		<sex>男</sex>
		<age>18</age>
		<email>[email protected]</email>
		<birthday>1987-06-08</birthday>
		<memo>好学生</memo>
	</student>
	<student id="5" group="5">
		<name>小明</name>
		<sex>男</sex>
		<age>18</age>
		<email>[email protected]</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文件则会报以下异常信息:

 

使用xmlpull解析xml_第1张图片

 

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

 

你可能感兴趣的:(使用xmlpull解析xml)