查找所有字段的最高值和最低值 children

Finding highest and lowest value of field for all children

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>

您可以使用 min/max 函数来获取最小值和最大值。

你可以做一个简单的比较来找到范围,就像你建议的那样:

%dw 2.0
output application/json
var data = [17,219,33]
var static = 23
---
min(data) <= static and static <= max(data) 

我不明白你的问题是什么你的解决方案对我来说没问题

%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) 

点 selector 将 select 匹配该标签的第一个节点的值,多值 selector (.*) 将 select 值匹配该标签的所有节点。所以基本上 payload.Level1.Level2.*Level3.Id returns 一个包含所有 Id 值的数组。 http://docs.mulesoft.com/mule-runtime/4.2/dataweave-selectors。然后我只需要对它进行排序。