背景:最近遇到接口返回是xml,所以需要整一个转换的工具类,方便后续其他xml处理。
依赖引入:
java
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.1</version>
</dependency>
工具类代码如下:
java
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
/**
* xml工具类
* @author Litluecat
*/
@Slf4j
public class MyXmlUtils {
/**
* 将xml转成map对象
* @param xml
* @param map
* @return 返回异常错误
*/
public static String xml2Map(String xml, Map<String, Object> map) {
String errorMsg = "";
try{
Document document = DocumentHelper.parseText(xml);
// 通过document对象获取根节点
Element element = document.getRootElement();
// 通过element对象的elementIterator方法获取迭代器
toMap(element, map);
} catch (DocumentException e) {
errorMsg = "xml转map异常!异常xml:" + xml;
//log.error("xml转map异常!异常xml:{}", xml, e);
}
return errorMsg;
}
/**
* 遍历所有节点
* @param element
* @param map
*/
private static void toMap(Element element, Map<String, Object> map){
Iterator it = element.elementIterator();
// 判断是否为叶子节点
if(it.hasNext()){
// 非叶子节点,需要继续往下层遍历,直到找到叶子节点
while (it.hasNext()) {
Element node = (Element) it.next();
// 节点名称,作为map的key
String key = node.getName();
Map<String, Object> mapTemp = new HashMap<>();
toMap(node, mapTemp);
map.put(key, mapTemp);
}
}else{
// 叶子节点,直接将值放入
map.put(element.getName(), element.getStringValue());
}
}
}
总结:虽然可以直接取xml节点,但是为了方便自己跟方便他人,还是写了一个工具类出来,这样别人有需要也可以使用。