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