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
相关产品推荐
相关产品推荐

