zoukankan      html  css  js  c++  java
  • 将xml字符串的所有叶标签转换成Map集合

    实际问题:对方服务器接口采用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} 
        }
    }
  • 相关阅读:
    mysql 表的类型
    【Mysql优化】key和index区别
    [置顶] 步步辨析JS中的对象成员
    [置顶] C语言单元测试框架
    代码规范总结
    AFNetworking、MKNetworkKit和ASIHTTPRequest对比
    在SQL中使用PL/SQL函数存在的问题
    C++中一个函数隐藏的有趣例子
    深入浅出Mybatis-分页
    SRM 207 Div II Level Two: RegularSeason,字符串操作(sstream),多关键字排序(操作符重载)
  • 原文地址:https://www.cnblogs.com/yfzhou528/p/12147357.html
Copyright © 2011-2022 走看看