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

原文地址:https://www.cnblogs.com/yfzhou528/p/12147357.html

时间: 2024-08-20 09:15:13

将xml字符串的所有叶标签转换成Map集合的相关文章

c++ json字符串转换成map管理

在cocos2dx for lua中,我们经常通过lua的table传入c++使用,然后早c++层操作数据. 实现步骤大致如下: table->string->c++层->通过rapidjson解析->存放在map中管理 在lua中,转换table大致如下 local tbl = {} tbl["fang"] = 1 tbl["jian"] = 1.4 tbl["heng"] = true tbl["fjh&qu

c语言代码编程题汇总:将字符串中的大写字母转换成小写字母

将字符串中的大写字母转换成小写字母 程序代码如下: 1 /* 2 2017年3月8日21:21:46 3 功能:将字符串中的大写字母转换成小写字母 4 */ 5 /* 6 #include"stdio.h" 7 8 int main() 9 { 10 int n = 0; 11 12 char a[100]; 13 14 printf("please input a string:"); 15 16 gets(a); 17 18 for(int i = 0 ;a[i

利用正则表达式将字符串“2014-09-29 14:35:36” 转换成“20140929143536”

package cn.usst.DataTest4; public class DataTest4 { /** * 将字符串"2014-09-29 14:35:36" 转换成"20140929143536" * @param args */ public static void main(String[] args) { String str = "2014-09-29 14:35:36"; String str2 = "";

Linux c字符串中不可打印字符转换成16进制

本文由 www.169it.com 搜集整理 如果一个C字符串中同时包含可打印和不可打印的字符,如果想将这个字符串写入文件,同时方便打开文件查看或者在控制台中打印出来不会出现乱码,那么可以将字符串中的不可打印字符转换成16进制,此处提供一个函数供使用: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 void printhex(unsigned char *src,int len) {     

JSON字符串转换成Map对象

页面向后台action传递一个json字符串,需要将json字符串转换成Map对象 import java.util.HashMap; import java.util.Iterator; import java.util.Map; import net.sf.json.JSONObject; public Map<String, String> toMap(Object object) { Map<String, String> data = new HashMap<Str

How to cast List&lt;Object&gt; to List&lt;MyClass&gt; Object集合转换成实体集合

List<Object> list = getList(); return (List<Customer>) list; Compiler says: cannot cast List<Object> to List<Customer> 不能将Object集合强制转换成实体集合! you can always cast any object to any type by up-casting it to Object first. in your case:

c#将枚举转换成字典集合

枚举在软件开发中的用途 1. 枚举类型(enum type)是具有一组命名常量的独特的值类型. 2. 枚举的定义: public enum Sex { 男 = 0, 女 = 1 } 或者:如果只给男赋值,那么女=1 public enum Sex { 男 = 0, 女 } 3. 我们在实际开发中,对于数据库的设计会经常需要很多状态字段(比如性别.审核状态.分类状态等等等等),而这些状态字段的值又只有固定的几个,这个时候我们一般会需要数据字典来维护这些数据.而数据字典该以什么形式存在呢? 以我自己

分享非常有用的Java程序 (关键代码)(五)---把 Array 转换成 Map

原文:分享非常有用的Java程序 (关键代码)(五)---把 Array 转换成 Map import java.util.Map; import org.apache.commons.lang.ArrayUtils; public class Main { public static void main(String[] args) { String[][] countries = { { "United States", "New York" }, { &quo

单表查询结果转换成泛型集合

/// <summary> /// 单表查询结果转换成泛型集合 /// </summary> /// <typeparam name="T">泛型集合类型</typeparam> /// <param name="dt">查询结果DataTable</param> /// <returns>以实体类为元素的泛型集合</returns> public static ILis