將xml字符串的全部葉標籤轉換成Map集合

實際問題:對方服務器接口採用webservice方式返回xml報文,現需解析xml獲取全部葉節點的標籤名及攜帶的值java

解決方案:利用dom4j解析xml並利用遞歸獲取葉節點,將標籤名及標籤值封裝到Map集合供業務調用node

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} 
    }
}
相關文章
相關標籤/搜索