XML 要素の選択

DataWeave には、入力データの構造をトラバースし、一致する値を返すための多数の​セレクター​があります。次の例は、単一値の DataWeave セレクター (​.​) を使用して、XML 要素からデータを抽出します。

開始する前に、Mule 4 アプリケーションでは DataWeave のバージョン 2.x が使用されることに注意してください。Mule 3 アプリケーションでの DataWeave については、​DataWeave バージョン 1.2 の例​を参照してください。 他の DataWeave バージョンの場合は、DataWeave の目次のバージョンセレクターを使用できます。

XML マークアップ言語には、1 つのルート要素が必要です。次の例では、子に同階層がないため、ルート (​language​) のセレクターは子要素を抽出できます。

DataWeave スクリプト:
%dw 2.0
output application/xml
---
payload.language
入力 XML ペイロード:
<language>
    <name>DataWeave</name>
</language>
出力 XML:
<?xml version='1.0' encoding='UTF-8'?>
<name>DataWeave</name>

1 つのルートを使用する有効な XML 構造でルート要素のすべてのサブ要素を返すため、次のスクリプトは DataWeave キーを使用して新しい要素名 (​myroot​) を指定し、ルート (​root​) を選択してその値を返します。1 つの XML ルートを返すことに失敗したスクリプトでは、エラー ​Trying to output non-whitespace characters outside main element tree (in prolog or epilog)…​​ が生成されます。

DataWeave スクリプト:
%dw 2.0
output application/xml
---
{ myroot: payload.root }
入力 XML ペイロード:
<root>
    <element>
        <subelement1>SE1</subelement1>
    </element>
    <element>E2</element>
</root>
出力 XML:
<?xml version='1.0' encoding='UTF-8'?>
<myroot>
  <element>
    <subelement1>SE1</subelement1>
  </element>
  <element>E2</element>
</myroot>

次の例では、子要素の名前 (​name​) と単一値セレクターを使用して、その値を選択します。​payload.language.name​ によって子要素に移動していることがわかります。このスクリプトは、DataWeave が有効な XML を作成できるように、値のルート要素も提供します。

DataWeave スクリプト:
%dw 2.0
output application/xml
---
{ newname : payload.language.name }
入力 XML ペイロード:
<language>
    <name>DataWeave</name>
    <version>2.0</version>
</language>
出力 XML:
<?xml version='1.0' encoding='UTF-8'?>
<newname>DataWeave</newname>

次の例は、インデックスを使用して、入力 XML から 2 番目の子要素の値を返します。DataWeave は子要素を配列のインデックスとして扱うため、インデックス ​language[1]​ を使用して 2 番目の子を選択できます。結果は 1 つの XML 要素になります。

DataWeave スクリプト:
%dw 2.0
output application/xml
---
{ version : payload.language[1] }
入力 XML ペイロード:
<language>
    <name>DataWeave</name>
    <version>2.0</version>
</language>
出力 XML:
<?xml version='1.0' encoding='UTF-8'?>
<version>2.0</version>

入力の複数の子要素が同じ名前である場合、インデックスを使用して子の値を選択します。次の例では、子要素のサブ要素を選択しています。

DataWeave スクリプト:
%dw 2.0
output application/xml
---
{ mysubelement : payload.root[0].subelement1 }
入力 XML ペイロード:
<root>
    <element>
        <subelement1>SE1</subelement1>
    </element>
    <element>E2</element>
</root>
出力 XML:
<?xml version='1.0' encoding='UTF-8'?>
<mysubelement>SE1</mysubelement>