繁体   English   中英

Mule Dataweave:使用when和Map

[英]Mule Dataweave: using when and Map

我需要根据以下输入中的类别检索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>

非常感谢对此的任何帮助

您可以使用以下代码-

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

在对此答案的评论中,您似乎已更改了要求:)。 无论如何,请编辑此答案以容纳以下评论“
我已经编辑了问题,希望它有意义。 我要输出所有标签(注意: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:""
        }
    )}
}

除非当前类别为T03,否则这是非常简单的转换,并且value字段为0。 在最初的问题中,您曾经提到过,仅当它是T03类别时才需要金额,除非有..否则检查,如果您想要每个类别的金额,则将其删除。

希望有帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM