Mule 为所有子项查找字段的最高值和最低值

Mule 为所有子项查找字段的最高值和最低值,mule,dataweave,Mule,Dataweave,1) 我想从项目数组中提取值最低的Id和值最高的Id 2) 当我有两个Id时,我想将它们与静态值进行比较,例如“23” 3) (这是我的问题) 我考虑将所有Id放入一个数组中,然后对数组进行排序,然后根据它们在数组中的索引提取最高值和最低值[0]表示最低Id,[-1]表示最高Id 4) 最后我将进行比较, (字段staticId为='23') XML示例: <?xml version="1.0" encoding="UTF-8"?> <ns:Level1 xmln

1)
我想从项目数组中提取值最低的Id和值最高的Id

2)
当我有两个Id时,我想将它们与静态值进行比较,例如“23”

3) (这是我的问题)
我考虑将所有Id放入一个数组中,然后对数组进行排序,然后根据它们在数组中的索引提取最高值和最低值[0]表示最低Id,[-1]表示最高Id

4)
最后我将进行比较,
(字段staticId为='23')

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>

17
219
33

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

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

%dw 2.0
output application/json
var data = [17,219,33]
var static = 23
---
min(data) <= static and static <= max(data) 
%dw 2.0
输出应用程序/json
var数据=[17219,33]
静态变量=23
---

min(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) 
%dw 2.0
输出应用程序/json
var Id=payload.Level1.Level2.*Level3.Id orderBy(idValue)->idValue
乐趣介于两者之间(低值、高值、静态ID)=

如果(staticId>=lowstid和staticId Hi-Machaval。它可以工作,谢谢。我只是不完全理解这一行:我可以看到它的功能,但我不理解它是如何工作的。var Id=payload.Level1.Level2.*Level3.Id orderBy(idValue)->idValue关于如何更深入地研究DataWeave,您是否有链接或建议?基本上,点选择器将选择与该标签匹配的第一个节点的值和多值选择器(.*)将选择与该标签匹配的所有节点的值。因此基本上,
payload.Level1.Level2.*Level3.Id
返回一个包含所有Id值的数组。有关更多信息,请访问..然后我只需要对其进行排序。谢谢Ryan。我的主要问题是列表中的项目3,如果没有帮助,我无法解决该问题。
%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)