欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

将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} 
    }
}