1

浏览 Dataweaver 文档链接:https ://developer.mulesoft.com/docs/dataweave#_attribute_selector_expressions

第 3.4 节 Key Present 试用下面提供的示例。

Input:
       <users>
     <name>Mariano</name>
       <name>Luis</name>
        <name>Mariano</name>
  </users>

转换:

        %dw 1.0
      %input payload application/xml   
      %output application/xml
       ---
       users: payload.users.name[?($ == "Mariano")]

当我尝试在我的 DataWeaver 中给出这个表达式时,它会给出类似cannot coerce a:string to a: array:(7,92). 已经给出了文档中提到的相同方式。有人可以请教。

预期反应:

           <?xml version="1.0" encoding="UTF-8"?>
          <users>
          <name>Mariano</name>
          <name>Mariano</name>
          </users>

同样在文档 1.1.2 字符串操作示例中对我不起作用

        %dw 1.0
        %input payload application/xml
        %output application/json
         %function words(name) name splitBy " "
         ---
       contacts: payload.users.*user map using (parts =  words($.name)){
        firstName: parts[0],
        (secondName: parts[1]) when (sizeOf parts) > 2,
        lastName: parts[-1],
        email: "$((lower $.name) replace " " with ".")@acme.com.ar",
      address: $.street
         }

显示错误multiple marker at this line missing '}' no viable alternative at input email

开始学习并处理提供的示例。谢谢。

4

1 回答 1

1

文档中的示例有一个错字,*之前有一个缺失name(应该修复):

%dw 1.0
%input payload application/xml
%output application/xml
---
users: payload.users.*name[?($ == "Mariano")]

问题是 XML 没有内置的列表表示,因此该列表由标记的多次出现来表示。该表达式*name返回一个出现 的列表name,该表达式[?($ == "Mariano")]就像一个过滤器(我更喜欢过滤器,因为它更容易理解)。

出现神秘错误消息是因为运算符适用于列表,但payload.users.name返回 的第一次出现name。(这就是为什么它说不能将字符串强制转换为数组)。

于 2015-09-15T18:22:32.270 回答