如何解决如何在Mulesoft 4中的FOR EACH范围的集合表达式中有条件地限制有效载荷?
在有效负载中已获得以下XML。
<colors>
<color>
<name>red</name>
<type>primary</type>
</color>
<color>
<name>orange</name>
<type>secondary</type>
</color>
<color>
<name>blue</name>
<type>primary</type>
</color>
<color>
<name>green</name>
<type>secondary</type>
</color>
</colors>
我只希望在FOREACH
中处理“主要”类型。在Mulesoft 3.x中,可以使用XPATH3
函数来限制集合。
<foreach
collection="#[xpath3('//colors/color[type/text()=\'primary\']',payload,'NODESET')]"
doc:name="For each primary color">
<... other commands .../>
</foreach>
在Mulesoft 4中,如何构造FOR EACH
来按类型对集合进行条件化?它为表达式使用DataWeave 2.0语法,但我找不到降低集合的任何示例。我认为我不再需要XPATH
了,因为有效载荷应该可以用点表示法寻址,但是我可能是错的。
解决方法
您可以执行以下操作以获取类型为主要颜色的颜色:
%dw 2.0
output application/xml
---
{
colors:
color: payload.colors.*color filter ($.`type` == "primary") map
{
a:$.name
}.a
}
输出:
<?xml version='1.0' encoding='UTF-8'?>
<colors>
<color>red</color>
<color>blue</color>
</colors>
或者通过以下操作获得的不仅仅是颜色:
%dw 2.0
output application/xml
---
{
colors:
color: payload.colors.*color filter ($.`type` == "primary")
}
输出:
<?xml version='1.0' encoding='UTF-8'?>
<colors>
<color>
<name>red</name>
<type>primary</type>
</color>
<color>
<name>blue</name>
<type>primary</type>
</color>
</colors>
,
您可以在foreach collection
中使用DW脚本,而不使用XPATH。
每个示例: (假设输入有效载荷是XML类型)
<foreach doc:name="For each primary color" collection="#[%dw 2.0
output application/java
---
payload..*color[?($.'type' == 'primary')]]">
<logger level="INFO" doc:name="Just logging" message="#[payload]"/>
</foreach>
如果仅将名称作为集合中的输出: (添加.name)
<foreach doc:name="For each primary color" collection="#[%dw 2.0
output application/java
---
payload..*color[?($.'type' == 'primary')].name]">
<logger level="INFO" doc:name="Just logging" message="#[payload]"/>
</foreach>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。