DataWeaver Mule文档部分1.1.2和3.4示例不起作用?

时间:2015-08-28 00:48:55

标签: mule mule-studio mule-component mule-el dataweave

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

第3.4节主要礼物 试试这个例子如下。

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

之类的错误

开始学习并制定提供的示例。感谢。

1 个答案:

答案 0 :(得分: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的第一个外观。 (这就是为什么它说不能强制字符串到数组)。