如何在 Mule 4.4.0 中将 XML 命名空间移动到 XML 输出中的特定父节点(不是根节点)

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

我正在尝试使用 dataweave 脚本在 mulesoft 4.4.0 中创建以下 XML。

<?xml version='1.0' encoding='UTF-8'?>
<batch>
  <nsA:parent xmlns:nsA="http://www.testA.com/core" xmlns:nsB="http://www.testB.com/core">
    <nsB:child >ChildNodeValue</nsB:child>
  </nsA:parent>
</batch>

我尝试过的Dataweave脚本是:

第一次尝试:

%dw 2.0
output application/xml
ns nsA http://www.testA.com/core
ns nsB http://www.testB.com/core

---
batch: {
    (payload map ((item, index) -> {
        nsA#parent:{
            nsB#child:"ChildNodeValue"
        }
    })
 )}


-------------------------------------

Output:

<?xml version='1.0' encoding='UTF-8'?>
<batch>
  <nsA:parent xmlns:nsA="http://www.testA.com/core">
    <nsB:child xmlns:nsB="http://www.testB.com/core">ChildNodeValue</nsB:child>
  </nsA:parent>
</batch>

第二次尝试::使用 writeDeclaredNamespaces="All"

%dw 2.0
output application/xml writeDeclaredNamespaces="All"
ns nsA http://www.testA.com/core
ns nsB http://www.testB.com/core

---
batch: {
    (payload map ((item, index) -> {
        nsA#parent:{
            nsB#child:"ChildNodeValue"
        }
    })
 )}


---------------------------
Output:

<?xml version='1.0' encoding='UTF-8'?>
<batch xmlns:nsA="http://www.testA.com/core" xmlns:nsB="http://www.testB.com/core">
  <nsA:parent>
    <nsB:child>ChildNodeValue</nsB:child>
  </nsA:parent>
</batch>

如何将命名空间移动到 XML 输出中的特定父节点(而不是根节点)?

谢谢你

dataweave mulesoft
1个回答
0
投票

一种方法是将命名空间定义为属性,如下所示。

%dw 2.0
output application/xml
---
batch: {
    "nsA:parent" @(
        "xmlns:nsA": "http://www.testA.com/core",
        "xmlns:nsB": "http://www.testB.com/core"
    ):{
        "nsB:child":"ChildNodeValue"
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.