这里的遍历方法要传入一个class对象。
这里的class的这个类里的属性必须和xml文件里的node的名称一致。(包括id,node里面必须有一个attribute id)
写的不是一般的乱。 以后再整理吧。
package com.lj.test; import java.io.File; 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.DocumentException; import org.dom4j.Element; import org.dom4j.io.SAXReader; import com.lj.model.Kanji; import com.lj.readGoi.PathUtil; import com.lj.readGoi.ReadXml; public class Test04 { public static void main(String[] args) throws Exception { SAXReader reader=new SAXReader(); Document doc=reader.read(new File(PathUtil.getPathByName("n1_eng.xml",Test04.class))); Element root=doc.getRootElement(); // System.out.println(root.elements().size()); // // System.out.println(root.elements().get(0)); // // System.out.println(root.elementText("kanji")); // // System.out.println(copy(Kanji.class,root)); List<Object> list=copy(Kanji.class,root); List<Kanji> re=new ArrayList<Kanji>(); for(Object o:list){ Kanji k=(Kanji) o; re.add(k); } System.out.println(list); System.out.println(re); } public static List<Object> copy(Class<?> clz,Element root ) throws Exception{ List<Object> result=new ArrayList<Object>(); ReadXml reader=new ReadXml(); Field[] fields=clz.getDeclaredFields(); List<Element> list=root.elements(); for(int i=0;i<list.size();i++){ Object objCopy=clz.getConstructor(new Class[]{}).newInstance(new Object[]{}); for(Field f:fields){ String name=f.getName(); System.out.println("name= "+name); String firstLetter=name.substring(0,1).toUpperCase(); String setMethodName="set"+firstLetter+name.substring(1,name.length()); Method setMethod=clz.getMethod(setMethodName,new Class[]{f.getType()}); Object obj=list.get(i); System.out.println(list.get(i).elementText(name)); String xmlName=list.get(i).elementText(name); if(name.equals("id")){ System.out.println("***********id************"); Integer id=Integer.parseInt(list.get(i).attribute(name).getText()); setMethod.invoke(objCopy,new Object[]{id}); } System.out.println("xmlname= "+xmlName); System.out.println("setMethod= "+setMethod.getName()); if(xmlName!=null){ setMethod.invoke(objCopy,new Object[]{xmlName});} } result.add(objCopy); } return result; } }