【问题标题】:Mule Dataweave: using when and MapMule Dataweave:使用 when 和 Map
【发布时间】:2016-04-13 12:34:38
【问题描述】:

我需要根据以下输入中的类别检索 AmountRequired 并列出所有重复的元素。

<root>
    <Unspecified>
        <Category>T03</Category>
        <AmountRequired>993</AmountRequired>
        <ExcessAmount>250</ExcessAmount>
        <Currency>GBP</Currency>
        <ExchangeRate>1</ExchangeRate>
    </Unspecified>
    <Unspecified>
        <Category>T03</Category>
        <AmountRequired>9903</AmountRequired>
        <ExcessAmount>250</ExcessAmount>
        <Currency>GBP</Currency>
        <ExchangeRate>1</ExchangeRate>
    </Unspecified>
    <Unspecified>
        <Category>P02</Category>
        <AmountRequired>992</AmountRequired>
        <Currency>GBP</Currency>
        <ExchangeRate>1</ExchangeRate>
    </Unspecified>
    <Unspecified>
        <Category>A29</Category>
        <AmountRequired>929</AmountRequired>
        <Currency>GBP</Currency>
        <ExchangeRate>1</ExchangeRate>
    </Unspecified>
</root>

我想得到如下输出。当 T03 有 2 个标签时,它应该显示两个金额,如下所示。此外,如果类别不存在,例如 P05 则不存在,并且如果我们对其进行了转换,那么它会错误地指出 P05 不存在,因此即使输入 xml 不存在,是否有办法克服错误'不包含 P05 类别?

<amountRequired>
        <amount>929</amount>
        <currency>GBP</currency>
        <exchangeRate>1</exchangeRate>
        <amountInSystemCurrency>550</amountInSystemCurrency>
    </amountRequired>
<amountRequired>
    <amount>993</amount>
    <currency></currency>
    <exchangeRate></exchangeRate>
    <amountInSystemCurrency></amountInSystemCurrency>
</amountRequired>
<amountRequired>
    <amount>9903</amount>
    <currency></currency>
    <exchangeRate></exchangeRate>
    <amountInSystemCurrency></amountInSystemCurrency>
</amountRequired>
<amountRequired>
        <amount>992</amount>
        <currency></currency>
        <exchangeRate></exchangeRate>
        <amountInSystemCurrency></amountInSystemCurrency>
    </amountRequired>

非常感谢您对此的任何帮助

【问题讨论】:

    标签: mule dataweave


    【解决方案1】:

    你可以使用下面的代码 -

    %dw 1.0
    %output application/xml
    ---
    using (T03=payload.root.*Unspecified filter ($.Category == 'T03')){
        //http://stackoverflow.com/questions/36598550/mule-dataweave-using-when-and-map
        amountRequired:{  
        amount:T03.AmountRequired[0] default 0,
        currency:"",
        exchangeRate:"",
        amountInSystemCurrency:""
    } 
    }
    

    它使用变量 T03 来保存从原始有效负载过滤的 T03 类别项。 amount: T03.AmountRequired[0] default 0存在时会从T03输出数量,否则默认为0。

    在这个答案的 cmets 中,您似乎已经更改了要求:)。无论如何,编辑这个答案以适应下面的评论“
    我已经编辑了这个问题,希望它有意义。我想输出所有标签(注意:T03 重复并且想要输出它们) – Neil24 13 分钟前"

    %dw 1.0
    %output application/xml
    ---
    {
        root : { (payload.root.*Unspecified map 
            amountRequired: {
                amount:$.AmountRequired unless $.Category != 'T03' otherwise 0,
                currency:"",
                exchangeRate:"",
                amountInSystemCurrency:""
            }
        )}
    }
    

    这是非常直接的转换,金额字段为 0,除非当前类别为 T03。 在最初的问题中,您提到只有当它是 T03 类别时才需要数量,所以除非 .. 否则检查,如果您想要每个类别的数量,只需将其删除。

    希望有帮助!

    【讨论】:

    • 不客气,如果它解决了您的问题,请不要忘记接受答案 :)
    • 谢谢,我是使用 stackoverflow 的新手,我不确定我需要在哪里接受答案。
    • 您是否看到我的答案左侧的勾号,单击它接受。检查 - meta.stackexchange.com/a/5235
    • 嗨,我有一个进一步的要求,其中有 2 个具有相同类别“T03”的未指定项目(我已将输入 xml 编辑为具有 T03 的 2 个元素)并且它应该列出它们。我曾尝试在使用前添加 payload.root.*Unspecified 地图,但没有奏效。非常感谢您的帮助。谢谢。
    • 你的意思是应该有两个数量元素?两个的样本输出是多少?
    猜你喜欢
    • 2016-01-12
    • 2016-06-07
    • 1970-01-01
    • 2017-11-26
    • 2018-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-21
    相关资源
    最近更新 更多