Mule 根元素上的dataweave xml命名空间声明
我有一个dataweave脚本,可以生成一些xmlMule 根元素上的dataweave xml命名空间声明,mule,dataweave,Mule,Dataweave,我有一个dataweave脚本,可以生成一些xml %dw 1.0 %output application/xml skipNullOn="everywhere" %namespace soap http://www.w3.org/2003/05/soap-envelope %namespace ns http://www.mycompany/2015/07 --- { soap#Envelope: { soap#Header: { },
%dw 1.0
%output application/xml skipNullOn="everywhere"
%namespace soap http://www.w3.org/2003/05/soap-envelope
%namespace ns http://www.mycompany/2015/07
---
{
soap#Envelope: {
soap#Header: {
},
soap#Body: {
ns#GetVehDetails: {
}
}
}
}
}
它产生了这样的东西
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
<soap:Header/>
<soap:Body>
<ns:GetVehDetails xmlns:ns="http://www.mycompany/2015/07">
如何更改dataweave脚本以在根元素处输出xml命名空间声明:
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
xmlns:ns="http://www.mycompany/2015/07">
<soap:Header/>
<soap:Body>
<ns:GetVehDetails>
这应该可以做到
%dw 1.0
%output application/xml skipNullOn="everywhere"
%namespace soap http://www.w3.org/2003/05/soap-envelope
%namespace ns http://www.mycompany/2015/07
---
{
soap#Envelope @("xmlns:ns":'http://www.mycompany/2015/07'): {
soap#Header: {
},
soap#Body: {
ns#GetVehDetails: {
}
}
}
}
}
这应该能奏效
%dw 1.0
%output application/xml skipNullOn="everywhere"
%namespace soap http://www.w3.org/2003/05/soap-envelope
%namespace ns http://www.mycompany/2015/07
---
{
soap#Envelope @("xmlns:ns":'http://www.mycompany/2015/07'): {
soap#Header: {
},
soap#Body: {
ns#GetVehDetails: {
}
}
}
}
}
这是一个旧的Dataweave问题,解决它的唯一方法如下:
您需要添加一个虚拟属性
@(ns#name:)
,其中的命名空间要位于最顶端的根标记的顶部,例如在本例中的信封
标记
%dw 1.0
%output application/xml skipNullOn="everywhere"
%namespace soap http://www.w3.org/2003/05/soap-envelope
%namespace ns http://www.mycompany/2015/07
---
{
soap#Envelope @(ns#name:""): {
soap#Header: {
},
soap#Body: {
ns#GetVehDetails: {
}
}
}
}
这是一个旧的Dataweave问题,解决它的唯一方法如下:
您需要添加一个虚拟属性
@(ns#name:)
,其中的命名空间要位于最顶端的根标记的顶部,例如在本例中的信封
标记
%dw 1.0
%output application/xml skipNullOn="everywhere"
%namespace soap http://www.w3.org/2003/05/soap-envelope
%namespace ns http://www.mycompany/2015/07
---
{
soap#Envelope @(ns#name:""): {
soap#Header: {
},
soap#Body: {
ns#GetVehDetails: {
}
}
}
}
不,您将在
GetVehDetails
上获得一个单独的命名空间定义。这是一个无效的dw脚本它在转换消息上无效,请尝试运行它。不,您将在GetVehDetails
上获得一个单独的命名空间定义。这是一个无效的dw脚本它在转换消息上无效,请尝试运行它!这是一个故障安全解决方案还是有任何陷阱我需要知道?@AnirbanSenChowdhary此解决方案还包括ns:name=“”属性以及第一个属性。有解决方案吗?这是将名称空间置于信封级别顶部所必需的。。这实际上是Dataweave中的一个缺陷,通过这种方式,您可以将所有名称空间置于根元素的顶部。。。您可以在此处指定任何属性,而不是ns#name。。。这只是一个虚拟属性。。这是目前唯一的诀窍,你不能跳过虚拟属性..谢谢!这是一个故障安全解决方案还是有任何陷阱我需要知道?@AnirbanSenChowdhary此解决方案还包括ns:name=“”属性以及第一个属性。有解决方案吗?这是将名称空间置于信封级别顶部所必需的。。这实际上是Dataweave中的一个缺陷,通过这种方式,您可以将所有名称空间置于根元素的顶部。。。您可以在此处指定任何属性,而不是ns#name。。。这只是一个虚拟属性。。这是目前唯一的技巧,您不能跳过该虚拟属性。。