在進行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());
}
}
}
}
}