在进行webservice通信的时候,需要解析xml为一个对象,由于个人也是第一次接触xml转对象,于是参考网上的例子写了一个工具类。
所有jar包支持:
- fastjson
- dom4j
public class XmlConverBeanUtils {
/**
* xml文件转换对象
*
* @param clazz 指定类
* @param xml 转换的xml字符串
* @param <T>
* @return
*/
public static <T> T conver(Class<T> clazz, String xml){
Map map = parse(xml);
return JSONObject.parseObject(JSON.toJSONString(map),clazz);
}
private static Map parse(String xml){
if(StringUtils.isBlank(xml)){
throw new NullPointerException("xml不能为空!");
}
return parse(xml,new HashMap<>());
}
private static Map parse(String xml, Map<String,Object> map){
//报文转成doc对象
Document doc = null;
try {
doc = DocumentHelper.parseText(xml);
} catch (DocumentException e) {
e.printStackTrace();
}
//获取根元素,准备递归解析这个XML树
Element root = doc.getRootElement();
getCode(root, map);
return map;
}
private static void getCode(Element root, Map<String,Object> map){
if(root.elements()!=null){
//如果当前跟节点有子节点,找到子节点
List<Element> list = root.elements();
//遍历每个节点
for(Element e:list){
if(e.elements().size()>0){
//当前节点不为空的话,递归遍历子节点;
getCode(e, map);
}
//如果为叶子节点,那么直接把名字和值放入map
if(e.elements().size()==0){
map.put(e.getName(), e.getTextTrim());
}
}
}
}
}