【问题标题】:dataweave xml namespace declarations at root element根元素处的 dataweave xml 命名空间声明
【发布时间】:2017-08-02 18:39:41
【问题描述】:

我有一个生成一些 xml 的 dataweave 脚本。

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

【问题讨论】:

    标签: mule dataweave


    【解决方案1】:

    这是一个旧的 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: {
    
                    }
                }
            }
        }
    

    【讨论】:

    • 谢谢!这是一个故障安全解决方案还是我需要了解任何陷阱?
    • @AnirbanSenChowdhary 此解决方案还包括 ns:name="" 属性以及第一个属性。有什么解决办法吗?
    • 这是在信封级别将命名空间置于顶部所必需的。这实际上是 Dataweave 中的一个缺陷,这样您就可以将所有命名空间置于顶部根元素...您可以提供任何属性而不是 ns#name ...这只是一个虚拟属性..目前这只是技巧,您不能跳过该虚拟属性..
    【解决方案2】:

    这应该可以解决问题。

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

    【讨论】:

    • 不,无论如何你都会在GetVehDetails 上获得一个单独的命名空间定义。
    • 这是一个无效的dw脚本
    • 它在转换消息中无效,尝试运行它
    猜你喜欢
    • 2014-01-27
    • 2016-10-30
    • 2012-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-10
    • 2011-01-27
    相关资源
    最近更新 更多