我试图从较大的集合中选择某种XML,使用过滤器仅获取具有正确属性的XML。
没有过滤器,我会收到当前集合中的所有最后一项,但无法为过滤器提供正确的语法...
我的XML数据:
<customer>
<profile>
<custom-attributes>
<custom-attribute attribute-id="customerCredit">0.0</custom-attribute>
<custom-attribute attribute-id="customerIDS">12345</custom-attribute>
<custom-attribute attribute-id="sscid">00001</custom-attribute>
</custom-attributes>
/<profile>
</customer>
我的数据编织过滤器:
payload.ns0#customers.*ns0#customer map ( customer , indexOfCustomer ) -> {
(customer.ns0#profile.*ns0#"custom-attributes" filter ($.ns0#"custom-attribute".@"attribute-id" == "customerIDS") map {
"keys" : $
}
)
在上面的示例中,我希望收到“ keys:12345”,但是由于过滤器,它被跳过了。
答案 0 :(得分:1)
您输入的内容与您的dw脚本不匹配,因此很难分辨,没有名称空间,并且缺少“ customers”元素。
但是根据您的输入和输出,您可以通过一个过滤器来实现它:
%dw 2.0
output application/json
---
payload.*customer map {
keys: $.profile."custom-attributes".*"custom-attribute" filter($.@"attribute-id"=="customerIDS")
}
输出:
[
{
"keys": [
"12345"
]
}
]
或者根据您的示例,也无需使用地图:
%dw 2.0
output application/json
---
keys: payload.customer.profile."custom-attributes".*"custom-attribute" filter($.@"attribute-id"=="customerIDS")
如果您提供更详细的输入和输出,您希望我们可以提供更多帮助。