您的位置:首页 > 编程语言 > Java开发

使用dom4j并利用java反射机制将对象集合写入XML

2016-06-20 14:52 441 查看
本代码中的方法可在未知某个类内的基本属性的时候,将对象集合写入xml中,利用了java反射机制

同时需要导入第三方jar包: dom4j.jar

方法为writeXml(ArrayList studentArray,Class elementClass)

参数1为需要写到磁盘的对象数组

参数2为该集合对象所在的类

运行后文件存在的位置为:当前项目的根目录

文件名为: 实体类名+”s.xml”

例如实体类为Student,则运行后会在当前项目的根目录生成 Students.xml文件

代码如下:

package com.chance.chapter05.reflection.xml;

import java.io.FileOutputStream;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.XMLWriter;

public class TestDom4jWriter {
public static void main(String[] args) {
ArrayList<Student> stuList = new ArrayList<>();
stuList.add(new Student("wucq","0000","1001", "吴承潜", 22, "男", "湖南"));
stuList.add(new Student("gongzg","0000","1002", "宫志刚", 22, "男", "甘肃"));
stuList.add(new Student("liuyx","0000","1003", "刘宇星", 22, "男", "湖南"));
writeXml(stuList,Student.class);
}
/**
* 写入xml
* @param fileName  要保存的文件路径
* @param studentArray   要保存的集合数据
*/
public static void writeXml(ArrayList studentArray,Class elementClass) {
// 生成一个Dom树
Document document = DocumentHelper.createDocument();
// 增加根节点
Element root = document.addElement(elementClass.getSimpleName()+"s");
// 循环添加Student节点
for (Object obj : studentArray) {
Element stuElement = root.addElement(elementClass.getSimpleName());
try {
//获取Person对象的所有属性
Class per = elementClass.getSuperclass();
Field fieldsPerson[] = per.getDeclaredFields();
for (Field field : fieldsPerson) {
field.setAccessible(true);
System.out.println("属性名:"+field.getName()+",值:"+field.get(obj));
// 给Student节点中添加Student的子节点
stuElement.addElement(field.getName()).setText(field.get(obj).toString());
}
//获取student对象的所有属性
Field fields[]=elementClass.getDeclaredFields();
for (Field field : fields) {
field.setAccessible(true);
System.out.println("属性名:"+field.getName()+",值:"+field.get(obj));
// 给Student节点中添加Student的子节点
stuElement.addElement(field.getName()).setText(field.get(obj).toString());
}
} catch (Exception e) {
e.printStackTrace();
}
}
// 将xml写入文件(输出流)
try {
XMLWriter xmlWriter = new XMLWriter(new FileOutputStream(elementClass.getSimpleName()+"s.xml"));
xmlWriter.write(document);
xmlWriter.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: