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"));
    }

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

相关推荐
丑八怪大丑4 天前
XML_Tomcat_HTTP
xml·http·tomcat
largecode5 天前
企业名称能在来电显示吗?号码显示公司名服务打通多终端展示
android·xml·ios·iphone·xcode·webview·phonegap
只可远观7 天前
Android XML命令式和Jetpack Compose声明式UI
android·xml
鹏晨互联7 天前
《深入理解 Compose 中的 matchParentSize 与 fillMaxSize —— 从 XML 到 Compose 的对比解析》
xml
小短腿的代码世界7 天前
Qt SVG渲染管线全解析:从XML解析到像素绘制的完整架构设计与性能优化实战
xml·qt·性能优化
HMS工业网络8 天前
技术干货:EtherCAT设备ESI(XML)文件中的CompleteAccess关键字有什么作用
xml·运维·服务器
鹏晨互联8 天前
【Compose vs XML:边框内外间距的实现对比】
android·xml
鹏晨互联10 天前
Jetpack Compose vs XML:fillMaxSize、fillMaxHeight、fillMaxWidth 全面对比
android·xml
如果'\'真能转义说11 天前
OOXML 文档格式剖析:哈希、ZIP结构与识别
xml·算法·c#·哈希算法