如何从 dataweave 中的 XML 中删除命名空间

问题描述 投票:0回答:1

需要通过保持其他所有内容(包括属性)不变来从 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 dataweave mulesoft mule-studio mule4
1个回答
0
投票

您可以使用答案中的函数尝试从 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 有效负载来说应该是这种情况),并将命名空间定义添加为属性。

不清楚为什么需要它,因为它没有被使用。似乎表明此输出的使用者有错误的假设或解析器。

© www.soinside.com 2019 - 2024. All rights reserved.