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

DataWeave不同环境XML处理结果不一致,求Studio适配方案

问题描述

处理包含嵌套文本与元素的XML文档(HTML格式)时,使用以下DataWeave脚本,在DataWeave Playground和VSCode插件中能输出正确的文本/元素顺序:

%dw 2.0
output application/json skipNullOn="everywhere"
var xmlString="<root>sometext0<element1>1</element1>sometext2</root>"
---
read(xmlString, 'application/xml')

正确输出(Playground/VSCode):

{
  "root": {
    "__text": "sometext0",
    "element1": "1",
    "__text": "sometext2"
  }
}

但在Anypoint Studio 7.15(Mule 4.4.0)中执行相同脚本时,__text节点被直接拼接,丢失了原始的内容顺序:

Studio/Mule运行时输出:

{
  "root": {
    "element1": "1",
    "__text": "sometext0sometext2"
  }
}

需实现让Studio/Mule运行时生成与Playground/VSCode一致的输出效果。

解决方案

Mule运行时默认的XML解析逻辑会合并相邻文本节点,若要保留混合内容的原始顺序,需在read函数中指定XML解析选项,开启mixedContentAsArray,将元素与文本节点按原始顺序存入数组。修改后的脚本如下:

%dw 2.0
output application/json skipNullOn="everywhere"
var xmlString="<root>sometext0<element1>1</element1>sometext2</root>"
---
read(xmlString, 'application/xml', {
    parseOptions: {
        mixedContentAsArray: true
    }
})

修改后的标准输出:

{
  "root": [
    "sometext0",
    {
      "element1": "1"
    },
    "sometext2"
  ]
}

注意:Playground输出中的重复__text键不符合JSON规范(JSON对象不允许重复键,实际解析时会被覆盖),仅为显示效果。上述数组形式的输出是符合JSON标准且能准确保留原始内容顺序的合理方案。若强行模拟Playground的非规范结构,后续数据处理易引发问题,不推荐。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 02:33:11