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

本代码中的方法可在未知某个类内的基本属性的时候,将对象集合写入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();
        }
    }

}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值