<?xml version="1.0" encoding="UTF-8"?>
<beans>
<bean id="user" class="com.zyz.test.User">
<property name="id" value="1"></property>
<property name="name" value="zhangsan"></property>
<property name="password" value="123456"></property>
</bean>
</beans>
导入jar包
<dependency>
<groupId>org.dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>2.1.3</version>
</dependency>
实体类
package com.zyz.test;
public class User {
private int id;
private String name;
private String password;
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", password=" + password + "]";
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
解析代码
public static void readerXml() {
//1.创建Reader对象
SAXReader reader=new SAXReader();
try {
//2.加载xml
Document doc=reader.read(new File("src/com/zyz/test/test.xml"));
//3.获取根节点
Element rootElement=doc.getRootElement();
// rootElement.elements()获取根节点下所有的节点,
//获取节点bean下属性为class的值
Element beanElement=rootElement.element("bean");
Attribute attr=beanElement.attribute("class");
String classpath=attr.getText();//获取内路径
//通过反射得到类
Class<?> clazz=Class.forName(classpath);
//通过无参构造
Object o=clazz.newInstance();
List<Element> propertylist=beanElement.elements("property");
//依次遍历根节点下的节点
for (Element element : propertylist) {
//获取name
Attribute name=element.attribute("name");
// System.out.println(name.getText());
//获取value
Attribute value=element.attribute("value");
String values=value.getText();
//使用属性名来 给object 传入值
Field fied=clazz.getDeclaredField(name.getText());
//可以让私有属性可以使用
fied.setAccessible(true);
if(fied.getType()==int.class) {
fied.set(o, Integer.parseInt(values));
}else if (fied.getType()==String.class) {
fied.set(o, values);
}
}
System.out.println(o);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}