Dom4j解析XML

下面是SAX解析XML的示例,包括三个文件employee.xml、Employee.java、Dom4Employee.java

 1.被解析的employee.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE employees [
	<!ELEMENT employees (employee*)>
	<!ELEMENT employee (name,age,gender,email,salary)>
	<!ATTLIST employee id  CDATA #IMPLIED> 
	<!ATTLIST employee depName CDATA #IMPLIED> 
	<!ELEMENT name (#PCDATA)>
	<!ELEMENT age (#PCDATA)>
	<!ELEMENT gender (#PCDATA)>
	<!ELEMENT email (#PCDATA)>
	<!ELEMENT salary (#PCDATA)>
]>
<employees>
	<employee id="1" depName="教学部">
		<name>tom</name>
		<age>20</age>
		<gender>male</gender>
		<email>tom@163.com</email>
		<salary>10k</salary>
	</employee>
	<employee id="2" depName="教学部">
		<name>jack</name>
		<age>30</age>
		<gender>female</gender>
		<email>jack@163.com</email>
		<salary>8k</salary>
	</employee>
	<employee id="3" depName="市场部">
		<name>rose</name>
		<age>25</age>
		<gender>female</gender>
		<email>rose@163.com</email>
		<salary>5k</salary>
	</employee>
	<employee id="4" depName="教学管理部">
		<name>mark</name>
		<age>30</age>
		<gender>male</gender>
		<email>mark@163.com</email>
		<salary>5k</salary>
	</employee>
</employees>

2.Employee.java文件

package exercise;

public class Employee {

	private int id;
	private String depName;
	private String name;
	private int age;
	private String gender;
	private String email;
	private String salary;
	
	public Employee() {
	}
	
	public Employee(int id, String depName, String name, int age, String gender, String email, String salary) {
		super();
		this.id = id;
		this.depName = depName;
		this.name = name;
		this.age = age;
		this.gender = gender;
		this.email = email;
		this.salary = salary;
	}
	
	@Override
	public String toString() {
		return "Employee [id=" + id + ", depName=" + depName + ", name=" + name + ", age=" + age + ", gender=" + gender
				+ ", email=" + email + ", salary=" + salary + "]";
	}
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getDepName() {
		return depName;
	}
	public void setDepName(String depName) {
		this.depName = depName;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getGender() {
		return gender;
	}
	public void setGender(String gender) {
		this.gender = gender;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public String getSalary() {
		return salary;
	}
	public void setSalary(String salary) {
		this.salary = salary;
	}
	
	
}

3.Dom4jEmployee.java实现解析 

package exercise;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

/**
 * 利用Dom4j解析employee.xml文件,将其中的雇员信息添加到一个容器中
 * Dom4j的核心就在于可以使用迭代器遍历Document
 * @author Attention
 *
 */
public class Dom4jEmployee {

	private static List<Employee> list = new ArrayList<>();   //创建容器用来保存employee对象
	private static Employee employee = null;                  //用来接受当前的employee
	
	public static void main(String[] args) throws Exception {
		
		//1.创建SAXReader用于读取xml
		SAXReader reader = new SAXReader();
		//2.调用read()方法读取文件,获得Document对象
		Document document = reader.read("src/exercise/employee.xml");
		//3.获取document的根元素
		Element root = document.getRootElement();
		//4.利用迭代器循环,取出每一个employee
		Iterator<Element> it = root.elementIterator();
		while(it.hasNext()) {
			employee = new Employee();
			Element element = (Element)it.next();
			String id = element.attribute("id").getStringValue();   //通过属性名获取属性值
			String depName = element.attribute("depName").getStringValue();
			employee.setId(Integer.parseInt(id));
			employee.setDepName(depName);
			
			//获得子元素的迭代器,里面包括name,age,gender,email,salary
			Iterator sit = element.elementIterator();
			while(sit.hasNext()) {
				Element se = (Element)sit.next();
				String name = se.getName();
				String value = se.getText();
				
				//将对应的值赋给相应的变量
				if(name.equals("name")) { 
					employee.setName(value);
				}else if(name.equals("age")) {
					employee.setAge(Integer.parseInt(value));
				}else if(name.equals("gender")) {
					employee.setGender(value);
				}else if(name.equals("email")) {
					employee.setEmail(value);
				}else if(name.equals("salary")) {
					employee.setSalary(value);
				}
			}
			list.add(employee);
		}
		
		for(Employee e:list) {
			System.out.println(e);
		}
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值