1)
我想从一组项目中提取具有最低值的ID和具有最高值的ID。
2)
当我有2个ID时,我想将它们与静态值进行比较,例如'23'
3) (这是我的问题)
我考虑过将所有Id放入一个数组中,然后对该数组进行排序,然后通过它们在数组中的索引提取最高和最低值,其中[0]表示最低的ID,[-1]表示最高的ID。
4)
最后我要进行比较,
(字段staticId为='23')
fun isIdBetween(lowestId, highestId, staticId) =
if(staticId >= lowestId and staticId <= highestId)
true
else
false
然后将结果放入变量
var result = isIdBetween(lowestId, highestId, staticId)
XML示例:
<?xml version="1.0" encoding="UTF-8"?>
<ns:Level1
xmlns:ns="aaaa:bbbb:cccc:dddd">
<Level2>
<Level3>
<Id>17</Id>
</Level3>
<Level3>
<Id>219</Id>
</Level3>
<Level3>
<Id>33</Id>
</Level3>
</Level2>
</ns:Level1>
答案 0 :(得分:2)
您可以使用最小值/最大值函数来获取最小值和最大值。
您可以进行简单的比较以找到范围,就像您建议的那样:
%dw 2.0
output application/json
var data = [17,219,33]
var static = 23
---
min(data) <= static and static <= max(data)
答案 1 :(得分:0)
我不明白您的问题是什么,您的解决方案对我来说很好
%dw 2.0
output application/json
var ids = payload.Level1.Level2.*Level3.Id orderBy (idValue) -> idValue
fun isIdBetween(lowestId, highestId, staticId) =
if(staticId >= lowestId and staticId <= highestId)
true
else
false
var threshold = 23
---
isIdBetween(ids[0],ids[1], threshold)
点选择器将选择与该标签匹配的第一个节点的值,而多值选择器(。*)将选择与该标签匹配的所有节点的值。因此,基本上,payload.Level1.Level2。* Level3.Id返回具有所有Id值的数组。 http://docs.mulesoft.com/mule-runtime/4.2/dataweave-selectors。然后,我只需要对它进行排序。