如何替换XML的子节点名称



我试图替换子节点名称"Layer01", "Layer02"Layer03",依此类推,再加上"Layer">

在Mule 3中我使用了:

payload.replaceAll('Layer\d\d','Layer')

逻辑是替换以字符串"Layer"开头的子节点。

示例输入:

<Layers>
<Layer01>
............
............
</Layer01>
<Layer30>
............
............
</Layer30>
....
....
</Layers>
预期输出:

<Layers>
<Layer>
............
............
</Layer>
<Layer>
............
............
</Layer>
....
....
</Layers>

我如何在Mule 4中实现这个转换?

全输入负载:https://github.com/Manikandan99/Map_request/blob/main/input_rating.xml

完整期望输出:https://github.com/Manikandan99/Map_request/blob/main/output_rating.xml

您可以使用递归函数来实现相同的结果。测试每个键是否与模式匹配,然后替换它,否则保持原样。如果子元素需要转换,则对每个值递归应用该函数。

%dw 2.0
output application/xml
fun renameLayers(x) =
x match {
case is Object -> 
x mapObject ((value, key, index) -> (key as String replace /^Layerdd/ with "Layer"): renameLayers(value)) 
else -> x
}
---
renameLayers(payload)

输入:

<Layers>
<Layer01>
<Layer02>
</Layer02>
</Layer01>
<Layer30>
<Other>
</Other>
</Layer30>
</Layers>

输出:

<?xml version='1.0' encoding='UTF-8'?>
<Layer>
<Layer>
<Layer/>
</Layer>
<Layer>
<Other/>
</Layer>
</Layer>

最新更新