Mule-Dataweave:使用when和Map

Mule-Dataweave:使用when和Map,mule,dataweave,Mule,Dataweave,我需要从下面的输入中根据类别检索amunrequired,并列出所有重复的元素 <root> <Unspecified> <Category>T03</Category> <AmountRequired>993</AmountRequired> <ExcessAmount>250</ExcessAmount> <Curren

我需要从下面的输入中根据类别检索amunrequired,并列出所有重复的元素

<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
993
250
英镑
1.
T03
9903
250
英镑
1.
P02
992
英镑
1.
A29
929
英镑
1.
我想按如下所示进行输出。当有2个T03标签时,其应显示两个金额,如下所示。另外,如果一个类别不存在,它就不存在,例如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>

929
英镑
1.
550
993
9903
992

非常感谢您使用以下代码提供的任何帮助-

%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。amunrequired[0]默认值0
将在存在时从T03输出金额,否则默认值为0

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

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


希望有帮助

不客气,如果答案解决了您的问题,请不要忘记接受答案:)谢谢,我不熟悉使用stackoverflow,我不确定在哪里需要接受答案。如果您看到我答案左侧的勾号,请单击它接受。检查-嗨,我有一个进一步的要求,其中有两个未指定的项目具有相同的类别“T03”(我已经编辑了输入xml,使其具有两个T03元素),它应该列出这两个项目。我尝试在使用之前添加payload.root.*未指定的映射,但无效。非常感谢你的帮助。谢谢。你的意思是应该有两个金额要素?两个示例的输出是什么?
%dw 1.0
%output application/xml
---
{
    root : { (payload.root.*Unspecified map 
        amountRequired: {
            amount:$.AmountRequired unless $.Category != 'T03' otherwise 0,
            currency:"",
            exchangeRate:"",
            amountInSystemCurrency:""
        }
    )}
}