需要通过保持其他所有内容(包括属性)不变来从 XML 中删除命名空间。我尝试使用替换和更新,但它似乎不起作用。下面是示例 XML,我需要在其中删除命名空间 (ds2)。
输入XML:
<ds2:note xmlns:ds2="http://sampleSchame" code= "12332" Id="333-333-333" set="2" St"2024-09-11T11:23:55" sq="2">
<customer>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</customer>
</ds2:note>
预期输出:
<note xmlns:ds2="http://sampleSchame" code= "12332" Id="333-333-333" set="2" St"2024-09-11T11:23:55" sq="2">
<customer>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</customer>
</note>
您可以使用答案中的函数尝试从 Mule 4 中的 XML 中删除名称空间时出错来删除名称空间的使用,然后添加模拟它是属性的“假”定义。
示例:
%dw 2.0
output application/xml
fun removeNamespace(element,namespaceName) =
element mapObject (value, key) ->
(if (key.# as String == namespaceName) (key as String) else (key)) @((key.@)) : (
if (value is Object) removeNamespace(value, namespaceName) else value
)
---
removeNamespace(payload, "http://sampleSchame")
mapObject ((value, key) ->
(key) @("xmlns:ds2":"http://sampleSchame", (key.@)): value
)
此脚本假定只有一个元素(对于 XML 有效负载来说应该是这种情况),并将命名空间定义添加为属性。
不清楚为什么需要它,因为它没有被使用。似乎表明此输出的使用者有错误的假设或解析器。