背景:最近遇到接口返回是xml,所以需要整一个转换的工具类,方便后续其他xml处理。
依赖引入:
<dependency><groupId>dom4j</groupId><artifactId>dom4j</artifactId><version>1.1</version>
</dependency>
工具类代码如下:
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的keyString key = node.getName();Map<String, Object> mapTemp = new HashMap<>();toMap(node, mapTemp);map.put(key, mapTemp);}}else{// 叶子节点,直接将值放入map.put(element.getName(), element.getStringValue());}}
}
总结:虽然可以直接取xml节点,但是为了方便自己跟方便他人,还是写了一个工具类出来,这样别人有需要也可以使用。