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')){
//
amountRequired:{
amount:T03.AmountRequired[0] default 0,
currency:"",
exchangeRate:"",
amountInSystemCurrency:""
}
}
它使用一个变量T03 来保存从原始负载中过滤出来的T03 类别项。
amount: T03.AmountRequired[0] default 0
存在时将从 T03 输出数量,否则默认为 0。
在这个答案的评论中,您似乎已经更改了要求:)。无论如何,编辑此答案以适应以下评论“
我已经编辑了问题,希望它有意义。我要输出所有的标签(注意:T03重复了,要输出两个) – Neil24 13 mins ago"
%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 类别时你才需要金额所以除非..否则检查,如果你想要每个类别的金额,只需将其删除。
希望对您有所帮助!
我需要根据以下输入的类别检索 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')){
//
amountRequired:{
amount:T03.AmountRequired[0] default 0,
currency:"",
exchangeRate:"",
amountInSystemCurrency:""
}
}
它使用一个变量T03 来保存从原始负载中过滤出来的T03 类别项。
amount: T03.AmountRequired[0] default 0
存在时将从 T03 输出数量,否则默认为 0。
在这个答案的评论中,您似乎已经更改了要求:)。无论如何,编辑此答案以适应以下评论“
我已经编辑了问题,希望它有意义。我要输出所有的标签(注意:T03重复了,要输出两个) – Neil24 13 mins ago"
%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 类别时你才需要金额所以除非..否则检查,如果你想要每个类别的金额,只需将其删除。
希望对您有所帮助!