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 にはリスト表現が組み込まれていないため、リストが 1 つのタグの複数の出現によって表されることです。この式は、*name出現する のリストを返します。この式は、フィルターのようなものです (フィルターの方が理解しやすいので、私はフィルターを好みます)。name[?($ == "Mariano")]

不可解なエラー メッセージが表示されるのは、演算子がリストに適用されpayload.users.nameますが、最初に出現した を返すためですname。(そのため、文字列を配列に強制できないと言われています)。

于 2015-09-15T18:22:32.270 に答える