利用反射与dom4j读取javabean生成对应XML
项目中需要自定义生成一个xml,要把Javabean中的属性拼接一个xml,例如要生成以下xml
<?xml version="1.0" encoding="gb2312"?> <students> <student> <name>张三</name> <age>18</age> <sex>男</sex> </student> <student> <name>李四</name> <age>19</age> <sex>男</sex> </student> <student> <name>小红</name> <age>17</age> <sex>女</sex> </student> </students>
我上篇文章有分享过dom4j xml 工具类。
生成这个xml,我们其实可以分析下,可以先新建一个student.java 里面有 name,age,sex属性,students 里面有多个student,那我们再新建一个students.java 里面搞个集合,然后我们通过之前我分享的工具类来操作。贴代码
1.student.java
/* * */ package com.test; /** * 描述 学生类 * * @author 小当家 * @created 2017年12月11日 */ public class Student { private String name; private String age; private String sex; public Student(String name, String age, String sex) { this.name = name; this.age = age; this.sex = sex; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } }
2.students.java
/* * */ package com.test; import java.util.List; /** * 描述 * @author 小当家 * @created 2017年12月11日 */ public class Students { private List<Student> student; public List<Student> getStudents() { return student; } public void setStudents(List<Student> students) { this.student = students; } }
3.测试
package com.test; import java.io.ByteArrayOutputStream; import java.util.ArrayList; import java.util.List; import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.dom4j.io.OutputFormat; import org.dom4j.io.XMLWriter; public class Testxml { public static void main(String[] args) throws IllegalArgumentException, IllegalAccessException, InstantiationException, ClassNotFoundException { Document doc = DocumentHelper.createDocument(); //创建根节点 Element root = DocumentHelper.createElement("students");//根节点 doc.setRootElement(root); List<Student> list = new ArrayList<Student>(); Student stu = new Student("张三", "18", "男"); Student stu2 = new Student("李四", "19", "男"); Student stu3 = new Student("小红", "17", "女"); list.add(stu); list.add(stu2); list.add(stu3); Students po = new Students(); po.setStudents(list); XmlUtil.copyAttrToEle(po, root);//复制对应的对象属性当到XML元素的值中 其中Students类中 private List<Student> student; 这里的student 表示字节点 System.out.println(document2String(doc)); } /** * * 描述 document2String * @author 小当家 * @created 2017年12月11日 * @param doc * @return */ private static String document2String(Document doc) { String str = ""; try { ByteArrayOutputStream out = new ByteArrayOutputStream(); OutputFormat format = new OutputFormat(" ", true , "gb2312"); XMLWriter writer = new XMLWriter(out,format); writer.write(doc); str = out.toString("gb2312"); } catch (Exception e) { e.printStackTrace(); } return str; } }
如果大家有更好的方法,请指教,或者代码中有什么问题,也可以指教指教