Hutool XML工具-XmlUtil遇到标签问题

在处理XML时,Hutool是一个非常实用的Java工具库,它提供了便捷的XML操作方法。

如果你在使用Hutool的XmlUtil工具类时遇到了标签类型问题,可能是因为XML结构复杂或特定标签的处理需求。

我遇到了一个稍复杂的xml结构,如下:

xml 复制代码
<user type="GROUP">
	<user_id>247692d5c9d278af</user_id>
	<name>漳平市菁城街道双拥路304城北小区二期A1栋1单元10楼1001号</name>
	<age>181</age>
</user>
  • hutool包
xml 复制代码
    <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>${hutool.version}</version>
    </dependency>

标签type="GROUP",如果返回记录只有一条的情况下,通过XmlUtil.xmlToMap转换时,返回的是user对象,而不是一个集合!

咋整呢。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

  • 先将XML格式字符串转换为json,将json中符合要求的转换为集合,如下:
java 复制代码
  String returnString = "";
  JSONObject jsonObject = JSONUtil.parseFromXml(returnString);
  //将json中符合要求的转换为集合
  normalizeJson(jsonObject);
  //其他业务处理
  • 检查json中是否需要转为数组的标签,以type="GROUP" 为例,代码如下:
java 复制代码
    /**
     * 转换数组
     *
     * @param json json对象
     */
    private static void normalizeJson(JSONObject json) {
        for (String key : json.keySet()) {
            Object value = json.get(key);

            if (value instanceof JSONObject) {
                // 检查是否需要转为数组
                JSONObject obj = (JSONObject) value;
                if (shouldConvertToArray(obj)) {
                    JSONArray array = new JSONArray();
                    array.add(obj);
                    json.set(key, array);
                } else {
                    normalizeJson(obj);
                }
            } else if (value instanceof JSONArray) {
                // 处理数组中的对象
                JSONArray array = (JSONArray) value;
                for (Object item : array) {
                    if (item instanceof JSONObject) {
                        normalizeJson((JSONObject) item);
                    }
                }
            }
        }
    }

    /**
     * 根据标识判断是否需要转换数组
     *
     * @param obj json对象
     */
    public static boolean shouldConvertToArray(JSONObject obj) {
    // 根据你的业务逻辑判断
    // 例如:特定类型或特定属性
    return obj.containsKey("type") && "GROUP".equals(obj.getStr("type"));
    }

已解决我想要的结果,如果有伙伴有其他方案,可以一起交流下!

相关推荐
执明wa2 天前
Android RecyclerView 多类型, 多种 Item
android·xml·开发语言·设计模式·android studio
wl85113 天前
SAP CPI 教程004 如何通过groovy修改XML节点属性值
xml
码匠许师傅4 天前
【C++三方组件】TinyXML2:两个文件的极简 XML 解析器
xml·c++
yuzhiboyouye5 天前
my-batisPlus什么时候用xml什么时候用mapper自带的方法,这两种写法专业一点叫什么,什么场景分别使用
xml
筝筝ba6 天前
如何跳过FFDC
xml·linux·运维·服务器·网络
yuzhiboyouye7 天前
那xml对应的sql语法,列举一下
xml·数据库·sql
筝筝ba12 天前
OpenBMC 自动化测试中的多进程陷阱:从 Execute Process 返回异常到 output.xml 损坏问题分析
xml·linux·运维·服务器·网络
spencer_tseng16 天前
[j2cache ehcache.xml]/tmp/.ehcache-diskstore.lock (Permission denied)
xml·linux·python·ehcache·[j2cache
DevOpenClub17 天前
PDF 多格式解析如何避免混用输出:TEXT、HTML、XML 与 TAG 数据契约
xml·前端·数据库·pdf·html
Java小白笔记18 天前
MyBatis XML Mapper 标签与 CRUD 原理实战
xml·数据库·mybatis