public classXmlParser {public static void main(String[] args) throwsException {//待填充user对象
User user = newUser();//获得User的class对象,后续要使用反射
Class clazz =user.getClass();
File file= new File("D:\\jsd1707\\xtt\\workspace\\rams\\src\\main\\java\\admin.xml");
SAXReader reader= newSAXReader();//读取xml文件到Document中
Document doc =reader.read(file);//获取xml文件的根节点
Element rootElement =doc.getRootElement();
System.out.println("根节点:" +rootElement.getName());//获得根节点的所有属性
List attrList =rootElement.attributes();for(Attribute attribute : attrList) {//根节点某个属性名
String attrName =attribute.getName();
System.out.println("当前节点属性名:" +attrName);//根节点某个属性值
String attrValue =attribute.getValue();//通过属性名定位user对象中对应属性的setter方法
Field filed =clazz.getDeclaredField(attrName);
Class cla= filed.getType();//属性类型
System.out.println("当前属性类型名称:" +cla.getName());
Object val=typeTransfer(cla.getName(), attrValue);
String methodName= "set" + attrName.substring(0, 1).toUpperCase() + attrName.substring(1);
System.out.println("当前节点属性对应方法名:" +methodName);
Method method=clazz.getDeclaredMethod(methodName, cla);
method.invoke(user, val);
}//获取子节点
List elements =rootElement.elements();for(Element element : elements) {//根节点某个节点名
String elemName =element.getName();
System.out.println("当前节点属性名:" +elemName);//根节点某个节点值
String elemValue =element.getText();//通过节点名定位user对象中对应属性的setter方法
Field filed =clazz.getDeclaredField(elemName);
Class cla= filed.getType();//属性类型
System.out.println("当前属性类型名称:" +cla.getName());
Object val=typeTransfer(cla.getName(), elemValue);
String methodName= "set" + elemName.substring(0, 1).toUpperCase() + elemName.substring(1);
System.out.println("当前节点属性对应方法名:" +methodName);
Method method=clazz.getDeclaredMethod(methodName, cla);
method.invoke(user, val);
}
System.out.println(user);
}private static Object typeTransfer(String typeName, String vlaue) throwsParseException {switch(typeName) {case "java.lang.Integer":returnInteger.valueOf(vlaue);case "java.lang.String":returnvlaue;case "java.util.Date":return new SimpleDateFormat("yyyy-MM-dd").parse(vlaue);
}return null;
}
}