根元素

时间:2017-05-17 12:16:07

标签: mule 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: {
        },
        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>

2 个答案:

答案 0 :(得分:3)

这是一个旧的Dataweave问题,唯一的解决方法如下:
您需要添加一个虚拟属性@(ns#name:""),其中包含您希望位于最顶层根标记顶部的命名空间,例如Envelope标记

%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: {

                }
            }
        }
    }

答案 1 :(得分:0)

这应该可以解决问题。

%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: {

                }
            }
        }
    }
}