首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > XML SOAP >

Java透过反射以及Annotation将类对象写入XML文件中

2013-11-03 
Java通过反射以及Annotation将类对象写入XML文件中。package com.lj.testimport java.io.Fileimport java

Java通过反射以及Annotation将类对象写入XML文件中。

package com.lj.test;import java.io.File;import java.io.FileWriter;import java.lang.reflect.Field;import java.lang.reflect.Method;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;import com.lj.annotation.NodeAnnotation;import com.lj.model.Person;public class WriteRef{public static void main(String[] args) throws Exception{Person p1 = new Person("li", "233", 25);Person p2 = new Person("wu", "123", 27);List<Person> al = new ArrayList<Person>();al.add(p1);al.add(p2);Document doc = DocumentHelper.createDocument();doc = writeList2XML(doc, al);XMLWriter writer=new XMLWriter(new FileWriter(new File("src/main/resources/Person.xml")),OutputFormat.createPrettyPrint());writer.write(doc);writer.flush();writer.close();}@SuppressWarnings({ "rawtypes", "unchecked" })private static Document writeList2XML(Document doc, List<?> objs)throws Exception{String temp_name = objs.get(0).getClass().getSimpleName();String firstLetter = temp_name.substring(0, 1).toLowerCase();String objName = firstLetter+ temp_name.substring(1, temp_name.length());String rootName = objName + "s";// xml文件的跟目录名称System.out.println("objname= " + objName);Element root = doc.addElement(rootName);Class clz = objs.get(0).getClass();Field[] fields = clz.getDeclaredFields();for (Object obj : objs){Element ele = root.addElement(objName);for (Field f : fields){//类属性名称, 用于获取getter和setterString name = f.getName();String firstLetter_ = name.substring(0, 1).toUpperCase();System.out.println(name);String getMethodName = "get" + firstLetter_+ name.substring(1, name.length());Method getMethod = clz.getMethod(getMethodName, new Class[] {});Object valueObj = getMethod.invoke(obj, new Class[] {});String value = valueObj.toString();System.out.println("value= " + value);//检查get方法是否包含注释if (getMethod.isAnnotationPresent(NodeAnnotation.class)){String nodeName = getMethod.getAnnotation(NodeAnnotation.class).nodeName();System.out.println("nodeName= -----------" + nodeName);ele.addElement(nodeName).addText(value);} else {ele.addElement(name).addText(value);}if (name.equals("id")){System.out.println("***********id=" + value + "********");ele.addAttribute(name, value);}}}return doc;}}






这里用到了反射以及注释。
注释的作用是将英文的对象名称转换成中文, 存储在xml文件中。

比如我在Person类中有一个password,但是我想在xml文件中以‘密码’作为节点名称。
那么就通过注释来获取。

在Person类中的代码为:

package com.lj.model;import com.lj.annotation.NodeAnnotation; public class Person{private String name;private String password;private int age;@NodeAnnotation(nodeName = "名字")public String getName(){return name;}public void setName(String name){this.name = name;}@NodeAnnotation(nodeName = "密码")public String getPassword(){return password;}public void setPassword(String password){this.password = password;}public int getAge(){return age;}public void setAge(int age){this.age = age;}public Person(String name, String password, int age){super();this.name = name;this.password = password;this.age = age;}}



热点排行