我需要根据以下输入中的类别检索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>
非常感谢您对此的任何帮助
答案 0 :(得分:0)
您可以使用以下代码 -
%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.
在对此答案的评论中,您似乎已经更改了要求:)。无论如何,编辑这个答案以适应以下评论&#34;
我编辑了这个问题,希望它有意义。我想输出所有标签(注意:T03重复并希望输出它们) - Neil24 13分钟前&#34;
%dw 1.0
%output application/xml
---
{
root : { (payload.root.*Unspecified map
amountRequired: {
amount:$.AmountRequired unless $.Category != 'T03' otherwise 0,
currency:"",
exchangeRate:"",
amountInSystemCurrency:""
}
)}
}
这是非常直接的转换,除非当前类别为T03,否则金额字段为0。 在原始问题中,您提到只有在T03类别时才需要金额,所以除非..否则检查,如果您想要每个类别的金额,只需删除它。
希望有帮助!