User類
public class User implements Serializable { private static final long serialVersionUID = 7506854293380407436L; private Integer id; private String loginName; private String password; private Date createDate; private String username; public User() { } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getLoginName() { return loginName; } public void setLoginName(String loginName) { this.loginName = loginName; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public Date getCreateDate() { return createDate; } public void setCreateDate(Date createDate) { this.createDate = createDate; } public String getUsername() { System.out.println("User類中的getUser方法"); return username; } public void setUsername(String username) { this.username = username; } @Override public String toString() { return "User [id=" + id + ", loginName=" + loginName + ", password=" + password + ", createDate=" + createDate + ", username=" + username + "]"; }
XML文檔:admin.xml
<?xml version="1.0" encoding="UTF-8"?> <user id="1"> <loginName>admin@qq.com</loginName> <password>123123</password> <username>超級管理員</username> <createDate>2017-03-07</createDate> </user>
將XML文檔解析成Java對象
public class XmlParser { public static void main(String[] args) throws Exception { // 待填充user對象 User user = new User(); // 獲得User的class對象,后續要使用反射 Class clazz = user.getClass(); File file = new File("D:\\jsd1707\\xtt\\workspace\\rams\\src\\main\\java\\admin.xml"); SAXReader reader = new SAXReader(); // 讀取xml文件到Document中 Document doc = reader.read(file); // 獲取xml文件的根節點 Element rootElement = doc.getRootElement(); System.out.println("根節點:" + rootElement.getName()); // 獲得根節點的所有屬性 List<Attribute> 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<Element> 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) throws ParseException { switch (typeName) { case "java.lang.Integer": return Integer.valueOf(vlaue); case "java.lang.String": return vlaue; case "java.util.Date": return new SimpleDateFormat("yyyy-MM-dd").parse(vlaue); } return null; } }