java 用dom4j把一个List T对象生成xml案例

dom4j准备

jar:dom4j-1.6.1.jar,该jar主要是生成和解析xml用

        fastjson-1.2.49.jar,该jar是alibaba的,主要是用来把List<T>对象转换成json

dom4j生成xml工具类(泛型)

package com.xm.xml.test;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.Field;
import java.util.List;
import java.util.Map;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

/**
 * dom4j工具类
 * @author ouyangjun
 */
public class Dom4jUtils {

	/**
	 * dom4j xml生成方法
	 * @param file
	 * @param list
	 * @param clz
	 */
	@SuppressWarnings("unchecked")
	public static <T> void createXml(File file, List<T> list, Class<T> clz){
		
		try{
			// 创建Document
			Document document = DocumentHelper.createDocument();
			
			// 创建根节点
			Element root = document.addElement("root");
			
			// 获取类中所有的字段
			Field[] fields = clz.getDeclaredFields();
			
			// 先把List<T>对象转成json字符串
			String str = JSONObject.toJSONString(list);
			
			// 把json字符串转换成List<Map<Object, Object>>
			List<Map<Object, Object>> mapList = (List<Map<Object, Object>>)JSONArray.parse(str);
			
			Element element;
			Map<Object,Object> map;
			// 迭代拼接xml节点数据
			for (int i=0; i<mapList.size(); i++) {
				// 在根节点下添加子节点
				element = root.addElement(clz.getSimpleName());
				
				// 获取Map<Object, Object>对象
				map = mapList.get(i);
				
				// 从map中获取数据,拼接xml
				for(Field field : fields){
					// 在子节点下再添加子节点
					element.addElement(field.getName())
			        	.addAttribute("attr", field.getType().getName())
			        	.addText(String.valueOf(map.get(field.getName())));
				}
				
			}
			
			// 把xml内容输出到文件中
			OutputFormat format = OutputFormat.createPrettyPrint();
			XMLWriter writer = new XMLWriter( new FileOutputStream(file), format);
			writer.write(document);
			
			System.out.println("Dom4jUtils Create Xml success!");
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}
	
}

对象类代码

package com.xm.xml.test;

import java.io.Serializable;

/**
 * 员工
 * @author ouyangjun
 */
public class Employee implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	private String name;
	
	private Integer age;
	
	private Long phone;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Integer getAge() {
		return age;
	}

	public void setAge(Integer age) {
		this.age = age;
	}

	public Long getPhone() {
		return phone;
	}

	public void setPhone(Long phone) {
		this.phone = phone;
	}

}

对象生成xml测试类

package com.xm.xml.test;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

/**
 * 用dom4j把一个对象数据转换成一个xml文件测试类
 * @author ouyangjun
 */
public class CreateEmployeeXml {

	public static void main(String[] args) {
		// 初始化数据
		List<Employee> list = new ArrayList<Employee>();

		Employee emp1 = new Employee();
		emp1.setName("ouyangjun");
		emp1.setAge(27);
		emp1.setPhone(13600425791L);
		
		Employee emp2 = new Employee();
		emp2.setName("dashu");
		emp2.setAge(30);
		emp2.setPhone(13699996666L);
		
		list.add(emp1);
		list.add(emp2);
		
		// 调用xml生成方法
		Dom4jUtils.createXml(new File("E:\\employee.xml"), list, Employee.class);
	}
	
}

xml生成效果图

本章完结,待续!

本文说明:该文章属于原创,如需转载,请标明文章转载来源

猜你喜欢

转载自blog.csdn.net/p812438109/article/details/81842055
今日推荐