Flex Gateway新着情報
Governance新着情報
Monitoring API ManagerDataWeave セレクターはオブジェクトと配列の構造をトラバースし、一致する値を返します。 開始する前に、Mule 4 アプリケーションでは DataWeave のバージョン 2.x が使用されることに注意してください。Mule 3 アプリケーションでの DataWeave については、DataWeave バージョン 1.2 のドキュメントを参照してください。 他の Mule バージョンの場合は、DataWeave の目次のバージョンセレクターを使用できます。
セレクターは常にコンテキスト内で動作し、コンテキストには、変数への参照、オブジェクトリテラル、配列リテラル、または DataWeave 関数の呼び出しとすることができます。
| セレクター種別 | 構文 | 戻り値の型 | 
|---|---|---|
単一値  | 
  | 
一致するキーに属する値の任意の型  | 
複数値  | 
  | 
すべての一致するキーの値の配列  | 
下位  | 
  | 
すべての一致する下位キーの値の配列  | 
動的  | 
動的セレクター を参照してください。  | 
  | 
キー-値ペア  | 
  | 
一致するキーを持つオブジェクト  | 
Index (インデックス)  | 
  | 
選択された配列インデックスの位置にある任意の型の値。配列の最後からインデックス付けするには負の数を使用します。たとえば、配列の最後の要素の場合は   | 
範囲  | 
  | 
選択されたインデックスからの値を含む配列  | 
XML 属性  | 
  | 
選択された属性の文字列値  | 
名前空間  | 
  | 
選択されたキーの名前空間の文字列値  | 
キーの存在  | 
  | 
ブール (オブジェクトまたは XML 属性の選択されたキーが存在する場合は   | 
アサートの存在  | 
  | 
文字列: キーが存在しない場合の例外メッセージ  | 
検索条件  | 
  | 
DataWeave 式が   | 
メタデータ  | 
  | 
Mule ペイロード、変数、属性の指定したメタデータの値を返します。セレクターは、クラス (  | 
| 
 以下の例では、これらのセレクターを使用しています。セレクターのその他の例については、「データの抽出」を参照してください。  | 
DataWeave では、オブジェクトのキー (たとえば JSON オブジェクト { "someName" : "Data Weave" } のキー "someName") と一致する名前が、そのオブジェクトからデータを選択できます。シンプルな例については、単一値セレクター を参照してください。
このセレクターは、指定されたセレクター名にキーが一致した最初のキー/値ペアの値と一致します。このセレクターは、オブジェクトまたは配列に適用できます。配列の場合は、配列内のすべてのオブジェクト値にセレクターが適用され、オブジェクト値以外の値はすべて無視されます。一致するキーがない場合は、値 null が返されます。
次の例は、単一の JSON オブジェクトに対するセレクターの働きを示しています。
DataWeave 名前空間セレクターは、名前空間またはローカル部分と一致する名前の使用をサポートします。セレクターが名前空間と一致するためには、名前が名前空間およびローカル部分と一致する必要があります。ローカル部分としか一致しない場合、名前空間とは関係なく、セレクターはそのローカル部分を持つすべての名前空間と一致します。
XML 名前空間とそれぞれのプレフィックスは、XML 要素の xmlns 属性に定義されています。たとえば、<h:table xmlns:h="http://www.w3.org/TR/html4/"/> は、プレフィックス h を名前空間  http://www.w3.org/TR/html4/ に割り当てる名前空間を定義します。
その名前空間内のすべての要素は h プレフィックスを持ちます。たとえば、要素 <h:table/> では、h が名前空間のプレフィックスで、table がローカル部分になります。
次の例では、名前空間とローカル部分を使用して、XML 要素から値を選択しています。
入力ペイロードには、ローカル名 (table) が同じで異なる名前空間を持つ XML 要素 h:table と f:table が含まれます。
<root>
  <h:table xmlns:h="http://www.w3.org/TR/html4/">
    <h:tr>
      <h:td>Apples</h:td>
      <h:td>Bananas</h:td>
    </h:tr>
  </h:table>
  <f:table xmlns:f="https://www.w3schools.com/furniture">
    <f:tr>
      <f:name>African Coffee Table</f:name>
      <f:width>80</f:width>
      <f:length>120</f:length>
    </f:tr>
  </f:table>
</root>
この DataWeave スクリプトは、指定された名前空間から XML コンテンツを選択します。スクリプトのヘッダーは、名前空間 (ns) の変数 html と furniture を作成し、入力ペイロードからの名前空間を格納します。要素 h:table の子を選択して要素 a に格納し、要素 f:table の子を選択して要素 b に格納するため、スクリプトは名前空間変数の html と furniture で名前空間セレクター (#) とローカル部分 (table) を使用します。
%dw 2.0
output application/xml
ns html http://www.w3.org/TR/html4/
ns furniture https://www.w3schools.com/furniture
---
root: {
     a: payload.root.html#table,
     b: payload.root.furniture#table
 }
次のスクリプトは、要素 a では要素 h:table の子を出力し、要素 b では要素 f:table の子を出力します。
<?xml version='1.0' encoding='UTF-8'?>
<root>
  <a>
    <h:tr xmlns:h="http://www.w3.org/TR/html4/">
      <h:td>Apples</h:td>
      <h:td>Bananas</h:td>
    </h:tr>
  </a>
  <b>
    <f:tr xmlns:f="https://www.w3schools.com/furniture">
      <f:name>African Coffee Table</f:name>
      <f:width>80</f:width>
      <f:length>120</f:length>
    </f:tr>
  </b>
</root>
次の例では、ローカル名 table を使用して h:table
要素から XML 値を選択しています。
入力ペイロードには、名前空間 "http://www.w3.org/TR/html4/" を含む table 要素を持つ XML が含まれます。
<root>
  <h:table xmlns:h="http://www.w3.org/TR/html4/">
    <h:tr>
      <h:td>Apples</h:td>
      <h:td>Bananas</h:td>
    </h:tr>
  </h:table>
</root>
複数値セレクター (*) は、オブジェクトの配列で最初に一致したキーの値を返すのではなく、一致するキーに対する値を含む配列 (たとえば、user がキーである場合は *user) を返します。このセレクターは、子孫の値は返さず、指定されたレベルの値のみを返します。どのキーも一致しない場合は値 null を返します。
入力ペイロードには user 要素の XML 配列が含まれます。
<users>
  <user>Weave</user>
  <user>BAT</user>
  <user>TF</user>
</users>
子孫セレクターは、すべての子とそれぞれの子孫のリストを返します。
このセレクターは、. を 1 つ使用することで他のどのセレクターとも連結できます。たとえば、payload.. は、すべての子の値、さらにそれぞれの子の値と、すべての子孫の値を再帰的に選択して、それらの値の配列を返します。セレクターは、他の要素と連結することもできます。たとえば、payload..user と指定すると、各 user キーの値と、それぞれの子孫の値がすべて選択されます。または payload..*name と指定すると、name のすべての子孫の値が選択されます。
次の例では、入力ペイロードの各子孫を選択しています。
入力ペイロードには、異なるレベルでネストされている要素のセットが含まれます。
<users>
  <user>
    <name>Weave</name>
    <user>
      <name>BAT</name>
      <user>
        <name>BDD</name>
      </user>
    </user>
  </user>
</users>
次の例では、name の値を降順に選択しています。
入力ペイロードには、異なるレベルでネストされている name 要素のセットが含まれます。
<users>
  <user>
    <name>Weave</name>
    <user>
      <name>BAT</name>
      <name>Munit</name>
      <user>
        <name>BDD</name>
      </user>
    </user>
  </user>
</users>
次の例では、name の値を降順に選択しています。
入力ペイロードには、異なるレベルでネストされている name 要素のセットが含まれます。
<users>
  <user>
    <name>Weave</name>
    <user>
      <name>BAT</name>
      <name>Munit</name>
      <user>
        <name>BDD</name>
      </user>
    </user>
  </user>
</users>
次の例では、Item 要素の Name の値を降順に選択しています。
入力ペイロードには、異なるレベルでネストされている Name 要素のセットが含まれます。
<Example>
    <Brand>
        <Id>32345</Id>
        <logo>circle</logo>
        <Item>
            <Name>Perfume</Name>
            <Item>
                <Name>Bosque</Name>
            </Item>
        </Item>
        <Item>
            <Name>t-Shirt</Name>
        </Item>
    </Brand>
    <Brand>
        <Id>435678C</Id>
        <logo>circle</logo>
        <Item>
            <Name>t-Shirt2</Name>
            <Item>
                <Name>t-Shirt red</Name>
                <Item>
                    <Name>t-Shirt red with logo</Name>
                </Item>
            </Item>
        </Item>
    </Brand>
</Example>
動的セレクターの構文は、選択する対象によって異なります。
単一値: payload[(nameExpression)]
複数値: payload[*(nameExpression)]
属性: payload[@(nameExpression)]
キー値: payload[&(nameExpression)]
名前空間を持つ単一値: payload.ns0#"$(nameExpression)"
次の例は、単一値を動的に選択する方法を示しています。
入力ペイロードはオブジェクトの配列になります。最初のオブジェクトは、キー "ref" と値 "name" を持ちます。2 番目のオブジェクトは、キー "name" と値 "Data Weave" を持ちます。"Data Weave":
{ "ref": "name", "name": "Data Weave" }
次の例は、名前空間を持つ単一値を動的に選択する方法を示しています。
入力ペイロードには、2 つの子要素を持ち、それらの片方が名前空間 http://www.w3.org/TR/html4/ である <root/> 要素が 1 つ含まれます。両方の子要素 (<f:table/> と <h:table>) はローカル名の table を持ちます。
<root ref="table">
    <f:table xmlns:f="https://www.w3schools.com/furniture">Manzana</f:table>
    <h:table xmlns:h="http://www.w3.org/TR/html4/">Banana</h:table>
</root>
この DataWeave スクリプトは、名前空間 http://www.w3.org/TR/html4/ を持つ要素の値を動的に選択します。
%dw 2.0
output application/json
ns h http://www.w3.org/TR/html4/
---
payload.root.h#"$(payload.root.@ref)"
式 payload.root.@ref では、root 要素の ref 属性に対して属性セレクター (@) を使用して、要素 <h:table xmlns:h="http://www.w3.org/TR/html4/">Banana</h:table> のローカル名 table と一致する値 table を選択しています。
すべてのセレクターが、定義済みの Mule Runtime 変数および DataWeave 変数で機能します。
Mule イベント内のペイロード、属性、変数データなどの Mule イベントデータを選択するには、定義済みの Mule Runtime 変数 (payload、attributes、vars など) を使用します。
抽出された値は、サポートされる DataWeave 値の型のいずれかのリテラル値として処理されます。
| 抽出するデータ | 構文 | 
|---|---|
ペイロード  | 
 
 Mule ペイロードについての詳細は、「メッセージペイロード」を参照してください。  | 
属性  | 
 例については、「属性」を参照してください。  | 
変数  | 
 名前の競合を回避するために、変数名の先頭に  
 Muke 変数についての詳細は、「Mule アプリケーションの変数」を参照してください。  | 
エラーオブジェクト  | 
 フローでのエラーに関する情報については、  | 
フロー  | 
 Logger でのフロー名:  
 フローについての詳細は、「フローおよびサブフロー」を参照してください。  |