---
schema_version: "1"
id: 8ba8616b75cd170c54681d5100812a7b9fd202635cd9cf30b44da1709ff372e4
title: DataWeave セレクター
collection: mulesoft
version: current
locale: ja-jp
portal_url: https://docs.salesforce.com/mulesoft/current/ja-jp/dataweave/2.6/dataweave-selectors.md
canonical_url: https://docs.mulesoft.com/jp/dataweave/2.6/dataweave-selectors
source_site: docs.mulesoft.com
content_type: documentation
content_hash: 099f0b5c9ea11e1b20e2186ac536336085762d6214a10b8d651d44ef95662ba2
description: MuleSoft Documentation Site
release: "2.6"
latest: false
---
# DataWeave セレクター

DataWeave セレクターはオブジェクトと配列の構造をトラバースし、一致する値を返します。 開始する前に、Mule 4 アプリケーションでは DataWeave のバージョン 2.x が使用されることに注意してください。Mule 3 アプリケーションでの DataWeave については、​[DataWeave バージョン 1.2 のドキュメント](#1.2@dataweave::index.adoc)​を参照してください。 他の Mule バージョンの場合は、DataWeave の目次のバージョンセレクターを使用できます。

セレクターは常にコンテキスト内で動作し、コンテキストには、変数への参照、オブジェクトリテラル、配列リテラル、または DataWeave 関数の呼び出しとすることができます。

<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 30%;">
<col style="width: 30%;">
<col style="width: 40%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">セレクター種別</th>
<th class="tableblock halign-left valign-top">構文</th>
<th class="tableblock halign-left valign-top">戻り値の型</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">単一値</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>.keyName</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">一致するキーに属する値の任意の型</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">複数値</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>.*keyName</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">すべての一致するキーの値の配列</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">下位</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>..keyName</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">すべての一致する下位キーの値の配列</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">動的</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#dynamic_selector">動的セレクター</a>​ を参照してください。</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">&nbsp;</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">キー-値ペア</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>.&amp;keyName</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">一致するキーを持つオブジェクト</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Index (インデックス)</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>[&lt;index&gt;]</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">選択された配列インデックスの位置にある任意の型の値。配列の最後からインデックス付けするには負の数を使用します。たとえば、配列の最後の要素の場合は ​<code>-1</code>​ になります。配列のサイズを超える値を使用すると ​<code>null</code>​ が返されます。</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">範囲</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>[&lt;index&gt; to &lt;index&gt;]</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">選択されたインデックスからの値を含む配列</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">XML 属性</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>@</code>, ​<code>.@keyName</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">選択された属性の文字列値</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">名前空間</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>keyName.#</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">選択されたキーの名前空間の文字列値</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">キーの存在</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>keyName?</code>​、​<code>keyName.@type?</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">ブール (オブジェクトまたは XML 属性の選択されたキーが存在する場合は ​<code>true</code>​、存在しない場合は ​<code>false</code>​)</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">アサートの存在</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>keyName!</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">文字列: キーが存在しない場合の例外メッセージ</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">検索条件</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>[?(boolean_expression)]</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">DataWeave 式が ​<code>true</code>​ を返す​<em>場合</em>​、キー-値ペアを含む配列またはオブジェクト。そうでない場合は、値 ​<code>null</code>​ を返します。</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">メタデータ</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>.^someMetadata</code></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Mule ペイロード、変数、属性の指定したメタデータの値を返します。セレクターは、クラス (​<code>.^class</code>​)、コンテンツ長 (​<code>.^contentLength</code>​)、エンコード (​<code>.^encoding</code>​)、MIME タイプ (​<code>.^mimeType</code>​)、メディア種別 (​<code>.^mediaType</code>​)、未加工 (​<code>.^raw</code>​)、およびカスタムメタデータ (​<code>.^myCustomMetadata</code>​) の値を返すことができます。詳細は、​<a href="https://docs.mulesoft.com/jp/dataweave/2.6/dataweave-cookbook-extract-data#selector_metadata" class="xref page">「データの抽出」</a>​を参照してください。</p>
</div></div></td>
</tr>
</tbody>
</table>

<table>
<tbody><tr>
<td class="icon">
<i class="fa icon-note" title="Note"></i>
</td>
<td class="content">
<div class="paragraph">
<p>以下の例では、これらのセレクターを使用しています。セレクターのその他の例については、​<a href="https://docs.mulesoft.com/jp/dataweave/2.6/dataweave-cookbook-extract-data" class="xref page">「データの抽出」</a>​を参照してください。</p>
</div>
</td>
</tr>
</tbody></table>

## [](#照合のルール)照合のルール

DataWeave では、オブジェクトのキー (たとえば JSON オブジェクト ​`{ "someName" : "Data Weave" }`​ のキー ​`"someName"`​) と一致する名前が、そのオブジェクトからデータを選択できます。シンプルな例については、​[単一値セレクター](#single_value_selector)​ を参照してください。

## [](#single_value_selector)単一値セレクター

このセレクターは、指定されたセレクター名にキーが一致した最初のキー/値ペアの値と一致します。このセレクターは、オブジェクトまたは配列に適用できます。配列の場合は、配列内のすべてのオブジェクト値にセレクターが適用され、オブジェクト値以外の値はすべて無視されます。一致するキーがない場合は、値 ​`null`​ が返されます。

<table><tbody><tr><td class="icon"><i class="fa icon-note" title="Note"></i></td><td class="content">ドットセレクター (​<code>.</code>​) と DataWeave 型でのドットセレクターの使用方法についての詳細は、<a href="https://docs.mulesoft.com/jp/dataweave/2.6/dataweave-selecting-types" class="xref page">型の選択</a>を参照してください。</td></tr></tbody></table>

### [](#例-オブジェクトに対する単一値セレクターの使用)例: オブジェクトに対する単一値セレクターの使用

次の例は、単一の JSON オブジェクトに対するセレクターの働きを示しています。

#### [](#入力ペイロード)入力ペイロード

入力ペイロードは、キー ​`"name"`​ と値 ​`"DataWeave"`​ を持つオブジェクトです。

```JSON
{ "name": "Data Weave" }
```

#### [](#dataweave-ソース)DataWeave ソース

この DataWeave スクリプトは、​`payload.name`​ を使用して、キー ​`"name"`​ を持つオブジェクトの値を選択します。 選択の実行手段としては、​`payload.name`​ と ​`payload."name"`​ のどちらも有効です。

```DataWeave
%dw 2.0
output application/json
---
payload.name
```

#### [](#出力)出力

次のスクリプトは、入力オブジェクト「Data Weave」の文字列値を出力します。

```JSON
"Data Weave"
```

### [](#例-配列に対する単一値セレクターの使用)例: 配列に対する単一値セレクターの使用

配列では、すべての要素にセレクターが適用されます。

#### [](#入力ペイロード-2)入力ペイロード

入力ペイロードは、同じキー「name」を持つ 2 つのオブジェクトを含む配列です。

```JSON
[
  {
    "name": "Arg"
  },
  {
    "name": "Japan"
  }
]
```

#### [](#dataweave-ソース-2)DataWeave ソース

この DataWeave スクリプトは、​`payload.name`​ を使用して、入力ペイロード中でキー「name」を持つオブジェクトの値を選択します。

```DataWeave
%dw 2.0
output application/json
---
payload.name
```

#### [](#出力-2)出力

次のスクリプトは、キー ​`"name"`​ を持つ入力オブジェクトの値 (​`"Arg"`​ と ​`"Japan"`​) を含む配列を出力します。

```json
["Arg", "Japan"]
```

## [](#namespace_example1)名前空間セレクター

DataWeave 名前空間セレクターは、名前空間またはローカル部分と一致する名前の使用をサポートします。セレクターが名前空間と一致するためには、名前が名前空間およびローカル部分と一致する必要があります。ローカル部分としか一致しない場合、名前空間とは関係なく、セレクターはそのローカル部分を持つすべての名前空間と一致します。

XML 名前空間とそれぞれのプレフィックスは、XML 要素の ​`xmlns`​ 属性に定義されています。たとえば、​`<h:table xmlns:h="http://www.w3.org/TR/html4/"/>`​ は、プレフィックス ​`h`​ を名前空間 ​`[http://www.w3.org/TR/html4/](http://www.w3.org/TR/html4/)`​ に割り当てる名前空間を定義します。 その名前空間内のすべての要素は ​`h`​ プレフィックスを持ちます。たとえば、要素 ​`<h:table/>`​ では、​`h`​ が名前空間のプレフィックスで、​`table`​ がローカル部分になります。

### [](#例-名前空間セレクターの使用)例: 名前空間セレクターの使用

次の例では、名前空間とローカル部分を使用して、XML 要素から値を選択しています。

#### [](#入力ペイロード-3)入力ペイロード

入力ペイロードには、ローカル名 (​`table`​) が同じで異なる名前空間を持つ XML 要素 ​`h:table`​ と ​`f: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>

  <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>
```

#### [](#namespace_variable)DataWeave ソース

この DataWeave スクリプトは、指定された名前空間から XML コンテンツを選択します。スクリプトのヘッダーは、名前空間 (​`ns`​) の変数 ​`html`​ と ​`furniture`​ を作成し、入力ペイロードからの名前空間を格納します。要素 ​`h:table`​ の子を選択して要素 ​`a`​ に格納し、要素 ​`f:table`​ の子を選択して要素 ​`b`​ に格納するため、スクリプトは名前空間変数の ​`html`​ と ​`furniture`​ で名前空間セレクター (​`#`​) とローカル部分 (​`table`​) を使用します。

```DataWeave
%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
 }
```

#### [](#出力-3)出力

次のスクリプトは、要素 ​`a`​ では要素 ​`h:table`​ の子を出力し、要素 ​`b`​ では要素 ​`f:table`​ の子を出力します。

```xml
<?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>
```

### [](#例-ローカル名を使用した-xml-値の選択)例: ローカル名を使用した XML 値の選択

次の例では、ローカル名 ​`table`​ を使用して ​`h:table`​ 要素から XML 値を選択しています。

#### [](#入力ペイロード-4)入力ペイロード

入力ペイロードには、名前空間 ​`"http://www.w3.org/TR/html4/"`​ を含む ​`table`​ 要素を持つ XML が含まれます。

```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>
```

#### [](#dataweave-ソース-3)DataWeave ソース

この DataWeave スクリプトは、名前区間ではなく XML 要素 ​`table`​ のローカル名を使用して、​`table`​ 要素の子の値を選択します。

```DataWeave
%dw 2.0
output application/xml
---
root: { a: payload.root.table }
```

#### [](#出力-4)出力

次のスクリプトは、​`table`​ 要素の子の値を含む XML を出力します。

```xml
<?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>
</root>
```

## [](#attribute_selector)属性セレクター

属性セレクターは、選択された名前式と一致する最初の属性値を返します。どのキーも一致しない場合は値 ​`null`​ を返します。

次の例では、XML 属性の値を選択しています。

### [](#入力ペイロード-5)入力ペイロード

入力ペイロードは、属性 ​`name="Weave"`​ を含む XML の ​`user`​ 要素です。

```xml
<user name="Weave"/>
```

### [](#dataweave-ソース-4)DataWeave ソース

この DataWeave スクリプトは、入力ペイロード (​`<user name="Weave"/>`​) から ​`name`​ 属性の値を選択します。​`@`​ は属性の選択を示しています。

```DataWeave
%dw 2.0
output application/json
---
payload.user.@name
```

### [](#出力-5)出力

この DataWeave スクリプトは、​`name`​ 属性の値を出力します。

```json
"Weave"
```

## [](#multi_value_selector)複数値セレクター

複数値セレクター (​`*`​) は、オブジェクトの配列で最初に一致したキーの値を返すのではなく、一致するキーに対する値を含む配列 (たとえば、​`user`​ がキーである場合は ​`*user`​) を返します。このセレクターは、子孫の値は返さず、指定されたレベルの値のみを返します。どのキーも一致しない場合は値 ​`null`​ を返します。

### [](#入力ペイロード-6)入力ペイロード

入力ペイロードには ​`user`​ 要素の XML 配列が含まれます。

```xml
<users>
  <user>Weave</user>
  <user>BAT</user>
  <user>TF</user>
</users>
```

### [](#dataweave-ソース-5)DataWeave ソース

この DataWeave スクリプトは、入力ペイロードのすべての ​`user`​ 要素の値を選択するために ​`*user`​ を使用します。

```DataWeave
%dw 2.0
output application/json
---
payload.users.*user
```

### [](#出力-6)出力

このスクリプトは、​`user`​ 値の配列を出力します。

```json
[
  "Weave",
  "BAT",
  "TF"
]
```

## [](#descendant_selector)子孫セレクター

子孫セレクターは、すべての子とそれぞれの子孫のリストを返します。 このセレクターは、​`.`​ を 1 つ使用することで他のどのセレクターとも連結できます。たとえば、​`payload..`​ は、すべての子の値、さらに​_それぞれの_​子の値と、すべての子孫の値を再帰的に選択して、それらの値の配列を返します。セレクターは、他の要素と連結することもできます。たとえば、​`payload..user`​ と指定すると、各 ​`user`​ キーの値と、それぞれの子孫の値がすべて選択されます。または ​`payload..*name`​ と指定すると、​`name`​ のすべての子孫の値が選択されます。

### [](#例-各子孫の選択)例: 各子孫の選択

次の例では、入力ペイロードの各子孫を選択しています。

#### [](#入力ペイロード-7)入力ペイロード

入力ペイロードには、異なるレベルでネストされている要素のセットが含まれます。

```xml
<users>
  <user>
    <name>Weave</name>
    <user>
      <name>BAT</name>
      <user>
        <name>BDD</name>
      </user>
    </user>
  </user>
</users>
```

#### [](#dataweave-ソース-6)DataWeave ソース

この DataWeave スクリプトは、​`..`​ を使用して、入力ペイロードのすべての要素を再帰的に選択して、JSON 配列として返します。

```DataWeave
%dw 2.0
output application/json
---
payload..
```

#### [](#出力-7)出力

```json
[
  {
    "user": {
      "name": "Weave",
      "user": {
        "name": "BAT",
        "user": {
          "name": "BDD"
        }
      }
    }
  },
  {
    "name": "Weave",
    "user": {
      "name": "BAT",
      "user": {
        "name": "BDD"
      }
    }
  },
  "Weave",
  {
    "name": "BAT",
    "user": {
      "name": "BDD"
    }
  },
  "BAT",
  {
    "name": "BDD"
  },
  "BDD"
]
```

### [](#例-降順での値の選択)例: 降順での値の選択

次の例では、​`name`​ の値を降順に選択しています。

#### [](#入力ペイロード-8)入力ペイロード

入力ペイロードには、異なるレベルでネストされている ​`name`​ 要素のセットが含まれます。

```xml
<users>
  <user>
    <name>Weave</name>
    <user>
      <name>BAT</name>
      <name>Munit</name>
      <user>
        <name>BDD</name>
      </user>
    </user>
  </user>
</users>
```

#### [](#dataweave-ソース-7)DataWeave ソース

この DataWeave スクリプトは、​`..`​ を使用して、入力ペイロードからすべての ​`name`​ (名) 要素を選択し、それらの値を JSON 配列として出力します。

```DataWeave
%dw 2.0
output application/json
---
payload..name
```

#### [](#出力-8)出力

このスクリプトは、すべての ​`name`​ 値の JSON 配列を出力します。

```json
[
  "Weave",
  "BAT",
  "BDD"
]
```

### [](#例)例

次の例では、​`name`​ の値を降順に選択しています。

#### [](#入力ペイロード-9)入力ペイロード

入力ペイロードには、異なるレベルでネストされている ​`name`​ 要素のセットが含まれます。

```xml
<users>
  <user>
    <name>Weave</name>
    <user>
      <name>BAT</name>
      <name>Munit</name>
      <user>
        <name>BDD</name>
      </user>
    </user>
  </user>
</users>
```

#### [](#dataweave-ソース-8)DataWeave ソース

この DataWeave スクリプトは、​`..*`​ を使用して、XML 階層の同じレベルにある反復 ​`name`​ キーの ​`BAT`​ および ​`Munit`​ 値を含め、入力ペイロードからすべての ​`name`​ 要素の値を選択し、それらの値を JSON 配列に出力します。

```DataWeave
%dw 2.0
output application/json
---
payload..*name
```

#### [](#出力-9)出力

このスクリプトは、すべての ​`name`​ 値の JSON 配列を出力します。

```json
[
  "Weave",
  "BAT",
  "Munit",
  "BDD"
]
```

### [](#例-降順での値の選択-2)例: 降順での値の選択

次の例では、​`Item`​ 要素の ​`Name`​ の値を降順に選択しています。

#### [](#入力ペイロード-10)入力ペイロード

入力ペイロードには、異なるレベルでネストされている ​`Name`​ 要素のセットが含まれます。

```xml
<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>
```

#### [](#dataweave-ソース-9)DataWeave ソース

この DataWeave スクリプトは、​`..*`​ を使用して、入力ペイロードから ​`Item`​ 要素でネストされたすべての ​`Name`​ 要素の値を選択し、それらの値を XML 配列に出力します。

```DataWeave
%dw 2.0
output application/xml
---
{
    Supermarket: {
        Item: {
            Value: payload..*Item.Name
        }
    }
}
```

#### [](#出力-10)出力

このスクリプトは、すべての ​`name`​ 値の XML 配列を出力します。

```xml
<?xml version='1.0' encoding='UTF-8'?>
<Supermarket>
  <Item>
    <Value>Perfume</Value>
    <Value>t-Shirt</Value>
    <Value>Bosque</Value>
    <Value>t-Shirt2</Value>
    <Value>t-Shirt red</Value>
    <Value>t-Shirt red with logo</Value>
  </Item>
</Supermarket>
```

## [](#dynamic_selector)動的セレクター

動的セレクターの構文は、選択する対象によって異なります。

- 単一値: `payload[(nameExpression)]`
- 複数値: `payload[*(nameExpression)]`
- 属性: `payload[@(nameExpression)]`
- キー値: `payload[&(nameExpression)]`
- 名前空間を持つ単一値: `payload.ns0#"$(nameExpression)"`

### [](#例-単一値の動的選択)例: 単一値の動的選択

次の例は、単一値を動的に選択する方法を示しています。

#### [](#入力ペイロード-11)入力ペイロード

入力ペイロードはオブジェクトの配列になります。最初のオブジェクトは、キー ​`"ref"`​ と値 ​`"name"`​ を持ちます。2 番目のオブジェクトは、キー ​`"name"`​ と値 ​`"Data Weave"`​ を持ちます。​`"Data Weave"`​:

```JSON
{ "ref": "name", "name": "Data Weave" }
```

#### [](#dataweave-ソース-10)DataWeave ソース

この DataWeave スクリプトは、​`"name"`​ キーの値を動的に選択します。

```DataWeave
%dw 2.0
output application/json
---
payload[(payload.ref)]
```

スクリプトでは、動的セレクター ​`[()]`​ の括弧内で ​`payload.ref`​ を渡しています。​`"ref"`​ の値は ​`"name"`​ であり、キー ​`"name"`​ と一致するため、このスクリプトは機能します。

#### [](#出力-11)出力

このスクリプトは、​`"name"`​ キーを持つオブジェクトの値を出力します。

```JSON
"Data Weave"
```

### [](#例-名前空間を持つ単一値の動的選択)例: 名前空間を持つ単一値の動的選択

次の例は、名前空間を持つ単一値を動的に選択する方法を示しています。

#### [](#入力ペイロード-12)入力ペイロード

入力ペイロードには、2 つの子要素を持ち、それらの片方が名前空間 ​`http://www.w3.org/TR/html4/`​ である ​`<root/>`​ 要素が 1 つ含まれます。両方の子要素 (​`<f:table/>`​ と ​`<h:table>`​) はローカル名の ​`table`​ を持ちます。

```xml
<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-ソース-11)DataWeave ソース

この DataWeave スクリプトは、名前空間 ​`http://www.w3.org/TR/html4/`​ を持つ要素の値を動的に選択します。

```DataWeave
%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`​ を選択しています。

#### [](#出力-12)出力

このスクリプトは、名前空間 ​`http://www.w3.org/TR/html4/`​ を持つ要素の値を出力します。

```JSON
"Banana"
```

## [](#selectors_variables)変数に保存されたコンテンツでのセレクターの使用

すべてのセレクターが、​[定義済みの Mule Runtime 変数](https://docs.mulesoft.com/jp/dataweave/2.6/dataweave-variables-context)​および ​[DataWeave 変数](https://docs.mulesoft.com/jp/dataweave/2.6/dataweave-variables)​で機能します。

Mule イベント内のペイロード、属性、変数データなどの ​[Mule イベント](https://docs.mulesoft.com/mule-runtime/latest/about-mule-event)​データを選択するには、定義済みの Mule Runtime 変数 (​`payload`​、​`attributes`​、​`vars`​ など) を使用します。

抽出された値は、サポートされる DataWeave 値の型のいずれかのリテラル値として処理されます。

<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 20%;">
<col style="width: 80%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">抽出するデータ</th>
<th class="tableblock halign-left valign-top">構文</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>ペイロード</strong></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><code>payload</code>​ (例: <code>payload.name</code>​)</p>
</div>
<div class="paragraph">
<p><code>payload</code>​ が ​<code>{"name" : "somebody"}</code>​ の場合、​<code>payload.name</code>​ は ​<code>"somebody"</code>​ を返します。</p>
</div>
<div class="paragraph">
<p>Mule ペイロードについての詳細は、​<a href="https://docs.mulesoft.com/mule-runtime/latest/about-mule-message#_message_payload" class="xref page">「メッセージペイロード」</a>​を参照してください。</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>属性</strong></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><code>attributes.&lt;myAttributeName&gt;</code>​</p>
</div>
<div class="paragraph">
<p>例については、​<a href="https://docs.mulesoft.com/mule-runtime/latest/about-mule-message#_attributes" class="xref page">「属性」</a>​を参照してください。</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>変数</strong></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><code>&lt;myVariableName&gt;</code>​</p>
</div>
<div class="paragraph">
<p>名前の競合を回避するために、変数名の先頭に ​<code>vars</code>​ を追加する必要があります。</p>
</div>
<div class="paragraph">
<p><code>vars.&lt;myVariableName&gt;</code>​</p>
</div>
<div class="paragraph">
<p>Muke 変数についての詳細は、​<a href="https://docs.mulesoft.com/mule-runtime/latest/about-mule-variables" class="xref page">「Mule アプリケーションの変数」</a>​を参照してください。</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>エラーオブジェクト</strong>​</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><code>error</code>​</p>
</div>
<div class="paragraph">
<p>フローでのエラーに関する情報については、​<code>#[error.cause]</code>​ を使用できます。</p>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>フロー</strong></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p><code>flow</code>​</p>
</div>
<div class="paragraph">
<p>Logger でのフロー名: <code>#[flow.name]</code>​</p>
</div>
<div class="paragraph">
<p><code>flow.name</code>​ は一部のコアコンポーネント (Set Payload、Transform Message など) では機能しません。</p>
</div>
<div class="paragraph">
<p>フローについての詳細は、​<a href="https://docs.mulesoft.com/mule-runtime/latest/about-flows" class="xref page">「フローおよびサブフロー」</a>​を参照してください。</p>
</div></div></td>
</tr>
</tbody>
</table>