如何在Dataweave 2.0中将地图和过滤器组合为XML属性?

时间:2019-05-23 13:06:56

标签: mule dataweave mule-esb

我试图从较大的集合中选择某种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”,但是由于过滤器,它被跳过了。

1 个答案:

答案 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")

如果您提供更详细的输入和输出,您希望我们可以提供更多帮助。