You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mulesoft JSON数组迭代树遍历:嵌套结构转指定格式XML实现需求

MuleSoft嵌套JSON树转XML实现方案

核心实现依赖

直接使用MuleSoft内置的DataWeave 2.0转换引擎即可实现,无需额外引入第三方组件,支持任意层级的嵌套结构遍历。

完整转换代码

将以下代码写入Mule的Transform Message组件中即可直接使用:

%dw 2.0
output application/xml indent = true
// 自定义递归遍历函数
fun traverseCategory(node: Object, parentPath: String, syncTS: String) = 
    let
        // 拼接当前节点的完整分类路径
        currentPath = if (parentPath == "") node.code else (parentPath ++ "/" ++ node.code)
        // 生成当前节点对应的Category结构
        currentNode = {
            Category @(
                CategoryId: node.id,
                CategoryPath: currentPath,
                Description: node.name,
                ShortDescription: node.displayName
            ): {
                // 若需匹配样例中特定节点ExtnSyncTS为空的逻辑,可在此处加判断条件,默认使用根节点时间戳
                Extn @(ExtnSyncTS: syncTS)
            }
        }
        // 递归遍历子节点,存在子节点则继续,否则返回空数组
        childNodes = if (not isEmpty(node.childList)) 
            node.childList flatMap (child) -> traverseCategory(child, currentPath, syncTS) 
        else []
    in
        // 合并当前节点和所有子节点的转换结果
        [currentNode] ++ childNodes
---
CategoryListArray: {
    // 根节点下的每个一级子节点单独对应一个CategoryList分组
    payload.childList map (firstLevelNode) -> {
        CategoryList: traverseCategory(firstLevelNode, "", payload.timeStamp)
    }
}

实现逻辑说明

  • 递归函数traverseCategory会自动处理不限层级的childList嵌套,无需提前固定结构层级
  • 每次递归传递上一级的路径字符串,拼接后生成符合要求的完整CategoryPath
  • 当节点的childList为空数组时,自动终止当前分支的递归,不会生成冗余节点
  • 根节点下的一级子节点会各自生成独立的CategoryList分组,完全匹配需求的分组规则

输出一致性说明

样例输出中ID为579-2-1的节点ExtnSyncTS为空属于特殊业务逻辑,如需实现该效果,可在生成Extn节点的位置增加条件判断:

Extn @(ExtnSyncTS: if(node.id == "579-2-1") " " else syncTS)

调整后输出结果将和需求给出的期望XML完全一致。


内容的提问来源于stack exchange,提问作者MyDream

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 00:15:05