如何替换 XML 的子节点名称
How to replace child node names of an XML
我正在尝试将 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 /^Layer\d\d/ 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>
我正在尝试将 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 /^Layer\d\d/ 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>