寻找所有儿童的视野的最高和最低值

时间:2019-06-13 09:47:48

标签: mule dataweave

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>

2 个答案:

答案 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。然后,我只需要对它进行排序。