将xml字符串的所有叶标签转换成Map集合
程序员文章站
2022-06-15 15:02:08
实际问题:对方服务器接口采用webservice方式返回xml报文,现需解析xml获取所有叶节点的标签名及携带的值 解决方案:利用dom4j解析xml并利用递归获取叶节点,将标签名及标签值封装到Map集合供业务调用 import java.util.HashMap; import java.util ......
实际问题:对方服务器接口采用webservice方式返回xml报文,现需解析xml获取所有叶节点的标签名及携带的值
解决方案:利用dom4j解析xml并利用递归获取叶节点,将标签名及标签值封装到map集合供业务调用
import java.util.hashmap; import java.util.list; import java.util.map; import org.dom4j.document; import org.dom4j.documenthelper; import org.dom4j.element; public class xmlutil { /** * 接收xml文件字符串,返回一个map,其包含xml中所有叶节点的k-v,举例: * 入参: * <root> * <a> * <aa>aa</aa> * <aaa>aaa</aaa> * </a> * <b> * <bb>bb</bb> * <bbb>bbb</bbb> * </b> * <c>c</c> * </root> * 返回: * {aa=aa, aaa=aaa, bb=bb, bbb=bbb, c=c} * * @param xmlstr xml文件字符串 * @return */ public static map<string, object> xml2map(string xmlstr) { map<string, object> map = new hashmap<string, object>(); try { // 将xml格式的字符串转换成document对象 document doc = documenthelper.parsetext(xmlstr); // 获取根节点 element root = doc.getrootelement(); // 将xml的所有叶节点的name-value封装进map leafnode2map(map, root); } catch (exception e) { e.printstacktrace(); } return map; } /** * 将xml的所有叶节点的name-value封装进map * * @param map * @param node */ @suppresswarnings("unchecked") private static void leafnode2map(map<string, object> map, element node) { list<element> elements = node.elements(); if (elements == null || elements.size() == 0) { map.put(node.getname(), node.gettexttrim()); } else { for (element element : elements) { // 递归 leafnode2map(map, element); } } } public static void main(string[] args) { string xmlstr = "<?xml version=\"1.0\" encoding=\"utf-8\"?><root><a><aa>aa</aa><aaa>aaa</aaa></a><b><bb>bb</bb><bbb>bbb</bbb></b><c>c</c></root>"; map<string, object> map = xml2map(xmlstr); system.out.println(map);// {aa=aa, aaa=aaa, bb=bb, bbb=bbb, c=c} } }
上一篇: 四则运算之加减法