dom4j 一 解析

dom4j 解析XML很方便,很容易理解,废话少说,直接看代码。

XML文件,3层的,比较简单:

<?xml version="1.0" encoding="utf-8" ?>
<employees>
	<employee empid="281033" ID="1" >
		<name>Leon   </name>
		<birthDate>1989-12-02</birthDate>
		<hireDate>2011-04-18</hireDate>
		<appartment>Insurance</appartment>
		<salary>3500</salary>
		<leaderId>186903</leaderId>
	</employee>
	<employee empid="281036" ID="2">
		<name>Sam</name>
		<birthDate>1988-12-02</birthDate>
		<hireDate>2011-04-18</hireDate>
		<appartment>Financial</appartment>
		<salary>3500</salary>
		<leaderId>186903</leaderId>
	</employee>
	<employee empid="186903" ID="3">
		<name>Mike</name>
		<birthDate>1978-12-02</birthDate>
		<hireDate>2009-04-18</hireDate>
		<appartment>Insurance</appartment>
		<salary>10000</salary>
		<leaderId>181911</leaderId>
	</employee>
</employees>


JavaBean:

package leon.tool;

import java.util.Date;

public class Employee implements Comparable{
	private String Id;
	private String name;
	private Date birthDate;
	private Date hireDate;
	private String appartment;
	private int salary;
	private String leaderId;
	
	//constructor
	public Employee(){}
	public Employee(String id){
		this.Id = id;
	}
	
	//getter and setter
	public String getId() {
		return Id;
	}
	public void setId(String id) {
		Id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Date getBirthDate() {
		return birthDate;
	}
	public void setBirthDate(Date birthDate) {
		this.birthDate = birthDate;
	}
	public Date getHireDate() {
		return hireDate;
	}
	public void setHireDate(Date hireDate) {
		this.hireDate = hireDate;
	}
	public String getAppartment() {
		return appartment;
	}
	public void setAppartment(String appartment) {
		this.appartment = appartment;
	}
	public int getSalary() {
		return salary;
	}
	public void setSalary(int salary) {
		this.salary = salary;
	}
	public String getLeaderId() {
		return leaderId;
	}
	public void setLeaderId(String leaderId) {
		this.leaderId = leaderId;
	}
	
	@Override
	public int compareTo(Object o) {
		Employee e = (Employee) o;
		return this.Id.compareTo(e.Id);
	}
	public boolean equals(Object o){
		Employee e = (Employee) o;
		return this.Id.equals(e.Id);
	}
	public String toString(){
		return this.Id+"\t"+this.name+"\t"+this.salary+"\t"+this.appartment;
	}
}


解析操作的主要类:

package leon.tool;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

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

public class Dom4jXMLReader {
	public static String XML_FILE_NAME = "employee.xml";
	public static File XML_FILE;
	static{
		XML_FILE = new File(XML_FILE_NAME);
	}
	
	public static List<Employee> parseXMLForEmployeeList(File xmlFile){
		List<Employee> employeeList = new ArrayList<Employee>();
		SAXReader saxReader = new SAXReader();
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		try {
			Document doc = saxReader.read(xmlFile);
			Element rootElement = doc.getRootElement();
			
			for(Iterator iter = rootElement.elementIterator();iter.hasNext();){
				Element element = (Element) iter.next();
				String id = element.attributeValue("empid");
				Employee emp = new Employee(id);
				
				/*get value method 1*/
				String name = element.element("name").getTextTrim();
				String leaderId = element.element("leaderId").getTextTrim();
				String appartment = element.element("appartment").getTextTrim();
				String birthDateStr = element.element("birthDate").getTextTrim();
				String hireDateStr = element.element("hireDate").getTextTrim();
				String salaryStr = element.element("salary").getTextTrim();
				emp.setName(name);
				emp.setLeaderId(leaderId);
				emp.setAppartment(appartment);
				emp.setBirthDate(sdf.parse(birthDateStr));
				emp.setHireDate(sdf.parse(hireDateStr));
				emp.setSalary(Integer.parseInt(salaryStr));
				
				/* get value method 2
				for(Iterator innerIter = element.elementIterator();innerIter.hasNext();){
					Element e = (Element) innerIter.next();
					if("name".equalsIgnoreCase(e.getName())){
						emp.setName(e.getTextTrim());
					}else if("birthDate".equalsIgnoreCase(e.getName())){
						emp.setBirthDate(sdf.parse(e.getTextTrim()));
					}else if("hireDate".equalsIgnoreCase(e.getName())){
						emp.setHireDate(sdf.parse(e.getTextTrim()));
					}else if("salary".equalsIgnoreCase(e.getName())){
						emp.setSalary(Integer.parseInt(e.getTextTrim()));
					}else if("appartment".equalsIgnoreCase(e.getName())){
						emp.setAppartment(e.getTextTrim());
					}else if("leaderId".equalsIgnoreCase(e.getName())){
						emp.setLeaderId(e.getTextTrim());
					}
				}
				*/
				employeeList.add(emp);
			}
			
		} catch (DocumentException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		return employeeList;
	}
	
	public static Map<String,Employee> parseXMLForEmployeeMap(File xmlFile){
		Map<String,Employee> employeeMap = new HashMap<String,Employee>();
		SAXReader saxReader = new SAXReader();
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		try {
			Document doc = saxReader.read(xmlFile);
			Element rootElement = doc.getRootElement();
			for(Iterator iter = rootElement.elementIterator();iter.hasNext();){
				Element element = (Element) iter.next();
				String empId = element.attributeValue("empid");
				Employee emp = elementToEmployee(element);
				employeeMap.put(empId, emp);
			}
			
		} catch (DocumentException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		return employeeMap;
	}
	
	public static Employee getEmployeeById(String empId){
		Employee emp = null;
		SAXReader saxReader = new SAXReader();
		
		try {
			Document doc = saxReader.read(XML_FILE);
			Element rootElement = doc.getRootElement();
			Element empElement = rootElement.elementByID(empId);
			emp = elementToEmployee(empElement);
		} catch (DocumentException e1) {
			e1.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		return emp;
	}
	
	public static Employee elementToEmployee(Element e) throws Exception{
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		
		String id = e.attributeValue("empid");
		Employee emp = new Employee(id);
		
		String name = e.element("name").getTextTrim();
		String leaderId = e.element("leaderId").getTextTrim();
		String appartment = e.element("appartment").getTextTrim();
		String birthDateStr = e.element("birthDate").getTextTrim();
		String hireDateStr = e.element("hireDate").getTextTrim();
		String salaryStr = e.element("salary").getTextTrim();
		
		emp.setName(name);
		emp.setLeaderId(leaderId);
		emp.setAppartment(appartment);
		emp.setBirthDate(sdf.parse(birthDateStr));
		emp.setHireDate(sdf.parse(hireDateStr));
		emp.setSalary(Integer.parseInt(salaryStr));
		
		return emp;
	}
	
}


简单的使用main方法跑跑看:

package leon.tool;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Collections;
import java.util.List;
import java.util.Map;

public class TestXMLEmployee {

	public static void main(String[] args) {
		File f = new File("employee.xml");
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		List<Employee> empList = Dom4jXMLReader.parseXMLForEmployeeList(f);
		
		Collections.sort(empList);
		
		for(Employee e : empList){
			System.out.println(e+"\t"+e.getLeaderId()+"\t"+sdf.format(e.getHireDate()));
		}
		
		Employee emp = Dom4jXMLReader.getEmployeeById("1");
		System.out.println(emp);
		
		Map<String,Employee> employeeMap = Dom4jXMLReader.parseXMLForEmployeeMap(f);
		System.out.println(employeeMap.get("281036"));
	}

}


用elementById方法时,要求XML中节点有大写的ID属性。

原文地址:https://www.cnblogs.com/xinyuyuanm/p/3022915.html