我正在尝试使用 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 输出中的特定父节点(而不是根节点)?
谢谢你
一种方法是将命名空间定义为属性,如下所示。
%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"
}
}