【工具类】XMLUtils
在使用这个类之前,你需要导入以下依赖
<!--XML-->
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
工具类如下
package tool.xml;
import org.dom4j.Element;
import java.lang.reflect.Field;
import java.text.SimpleDateFormat;
import java.util.Date;
public class XMLUtils {
/**
* json 数据转换对象
*
* @param rootElt 要转换的Element数据
* @param pojo 要转换的目标对象类型
* @return 转换的目标对象
* @throws Exception 转换失败
*/
public static Object fromXmlToBean(Element rootElt, Class<?> pojo) throws Exception {
// 首先得到pojo所定义的字段
Field[] fields = pojo.getDeclaredFields();
// 根据传入的Class动态生成pojo对象
Object obj = pojo.newInstance();
for (Field field : fields) {
// 设置字段可访问(必须,否则报错)
field.setAccessible(true);
// 得到字段的属性名
String name = field.getName();
// 这一段的作用是如果字段在Element中不存在会抛出异常,如果出异常,则跳过。
try {
rootElt.elementTextTrim(name);
} catch (Exception ex) {
continue;
}
if (rootElt.elementTextTrim(name) != null && !"".equals(rootElt.elementTextTrim(name))) {
// 根据字段的类型将值转化为相应的类型,并设置到生成的对象中。
if (field.getType().equals(Long.class) || field.getType().equals(long.class)) {
field.set(obj, Long.parseLong(rootElt.elementTextTrim(name)));
} else if (field.getType().equals(String.class)) {
field.set(obj, rootElt.elementTextTrim(name));
} else if (field.getType().equals(Double.class) || field.getType().equals(double.class)) {
field.set(obj, Double.parseDouble(rootElt.elementTextTrim(name)));
} else if (field.getType().equals(Integer.class) || field.getType().equals(int.class)) {
field.set(obj, Integer.parseInt(rootElt.elementTextTrim(name)));
} else if (field.getType().equals(Date.class)) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date date = format.parse(rootElt.elementTextTrim(name));
field.set(obj, date);
}else {
System.out.println("缺少"+field.getType()+"类型的在转化,可能造成数据缺失");
}
}
}
return obj;
}
}
使用方法
// 将XML string 转化成 Document 对象
Document doc = DocumentHelper.parseText(resultStr);
// 获取根元素
Element root = doc.getRootElement();
// 获取某一个节点元素的迭代器
Iterator<Element> iterator = root.element("tree").elementIterator();
while (iterator.hasNext()) {
// 迭代取下一个
Element node = (Element) iterator.next();
// 转化成实体类
CityProjectClueRankingOneDto o = (CityProjectClueRankingOneDto) XmlUtil.fromXmlToBean(node, CityProjectClueRankingOneDto.class);
cityProjectClueRankingOneDtos.add(o);
}
hutool工具里面也有相应的工具,非常方便。