Flex Gateway新着情報
Governance新着情報
Monitoring API ManagerMIME タイプ: application/xml
ID: xml
XML データ構造は、他のオブジェクト、文字列、または null
値が含まれている可能性がある DataWeave オブジェクトにマップされます。XML で無制限要素を使用してコレクションを表します。コレクションは DataWeave オブジェクトの反復キーにマップされます。また、DataWeave では namespaces
、CData
、xsi:types
がネイティブにサポートされます。
XML 入力の DataWeave リーダーでは、次の解析戦略がサポートされます。
インデックス付き
メモリ内
ストリーミング
DataWeave リーダーおよびライターでこの形式に適用できる解析戦略を理解するには、「DataWeave 解析戦略」を参照してください。
CData
カスタム型CData
は、文字データ (CDATA) ブロックを識別するために使用する XML のカスタム DataWeave データ型です。CData
型により、XML ライターは CDATA
ブロック内でコンテンツをラップしたり、CDATA
ブロック内に入力文字列があるかどうかを確認したりできるようになります。DataWeave では、CData
は型 String
から継承されます。
DataWeave 2.5.0 で導入されました。Mule 4.5.0 以降でサポートされます。
DataWeave は、XML ファイルの文書型宣言の読み取りおよび書き込みを行うことができます。
文書型宣言を読み取るには、システムプロパティを com.mulesoft.dw.xml_reader.parseDtd
に設定できます。
DataWeave は、読み取りフェーズで文書型宣言を解析して、コンテンツをルート要素のメタデータとして保存します。DocType
値は、docType
変数に保存されます。メタデータセレクター (^
) を使用して、次のような式でその変数の値を抽出できます。
payload.^docType
例: DTD 値を読み取る、例: DTD 値を書き込む、例: DTD 値を文字列表現に変換するの例を参照してください。
メタデータセレクターを使用してアクセスできます。
デフォルトでは、宣言が読み取りおよび書き込みされる場合でも、DTD は無効になっています。詳細は、Reader のプロパティの XML リーダープロパティ supportDtd
を参照してください。
次の例は、XML 形式の使用方法を示しています。
さまざまなデータ形式で使用可能なリーダーとライターのプロパティについての詳細は、「サポートされるデータ形式」を参照してください。
次の例は、XML ストリーミングのセットアップ方法を示しています。ユーザーは次のリーダープロパティを指定する必要があります。
streaming=true
collectionPath="root.repeated"
collectionPath
設定では、ストリーミングする要素を選択します。
ストリーミング時は、XML パーサーはすべての XML コンテンツがなくてもコンテンツの処理を開始できます。
次の XML が DataWeave ソースへの入力ペイロードとして機能します。これは myXML.xml
という XML ファイルのコンテンツであるとします。
<root>
<text>
Text
</text>
<repeated>
<user>
<name>Mariano</name>
<lastName>de Achaval</lastName>
<age>36</age>
</user>
<user>
<lastName>Shokida</lastName>
<name>Leandro</name>
<age>30</age>
</user>
<user>
<age>29</age>
<name>Ana</name>
<lastName>Felissati</lastName>
</user>
<user>
<age>29</age>
<lastName>Chibana</lastName>
<name>Christian</name>
</user>
</repeated>
</root>
DataWeave スクリプトのリーダープロパティ設定は、入力をストリーミングして反復キーを処理するように XML リーダーに指示します。スクリプトは DataWeave map
関数を使用して反復キーを反復処理します。
%dw 2.0
var myInput readUrl('classpath://myXML.xml', 'application/xml', {streaming:true, collectionPath: "root.repeated"})
output application/dw
---
myInput.root.repeated.*user map {
n: $.name,
l: $.lastName,
a: $.age
}
XML で null
値を表す標準の方法はないため、nil
属性が true
に設定されている場合、リーダーは値を null
にマップします。
null
値を出力XML リーダープロパティ nullValueOn
は、値 blank
(デフォルト) または empty
を受け入れます。
次の例では nullValueOn
のデフォルトを使用するため、title
および author
要素の値を null
にマップします。
次の XML が DataWeave ソースへの入力として機能します。title
および author
要素の値がないことに注意してください。
この入力はファイル myInput.xml
内のコンテンツであるとします。
<book>
<author></author>
<title>
</title>
</book>
null
値を出力XML リーダープロパティ nullValueOn
は、値 blank
(デフォルト) または empty
を受け入れます。
次の例では、XML リーダープロパティ nullValueOn
が empty
に設定されているため、title
要素の値を String
にマップし、author
要素の値を null
にマップします。
次の XML が DataWeave ソースへの入力として機能します。title
および author
要素の値がないことに注意してください。この 2 つの要素の違いは、開始タグと終了タグ間のスペースにあります。title
要素のタグは改行 (非表示文字 \n
) によって分割されていますが、author
要素のタグはどの文字によっても分割されていません。
この入力はファイル myInput.xml
内のコンテンツであるとします。
<book>
<author></author>
<title>
</title>
</book>
次の例では、XML 属性を正規 DataWeave 表現 (application/dw
形式および MIME タイプ) にマップします。
この XML が DataWeave ソースへの入力ペイロードとして機能します。入力に XML 属性が含まれていることに注意してください。
<users>
<company>MuleSoft</company>
<user name="Leandro" lastName="Shokida"/>
<user name="Mariano" lastName="Achaval"/>
</users>
次の例では、XML 名前空間を正規 DataWeave 表現 (application/dw
形式および MIME タイプ) にマップします。
この XML が DataWeave ソースへの入力ペイロードとして機能します。入力に 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:name>African Coffee Table</f:name>
<f:width>80</f:width>
<f:length>120</f:length>
</f:table>
</root>
DataWeave スクリプトは XML 入力ペイロードを DataWeave (dw) 形式および MIME タイプに変換します。
%dw 2.0
output application/dw
---
payload
出力は、XML 入力が DataWeave (dw) 形式でどのように表されるかを示しています。XML からの名前空間がどのように表されているかに注意してください。
ns h http://www.w3.org/TR/html4/
ns f https://www.w3schools.com/furniture
---
{
root: {
h#table: {
h#tr: {
h#td: "Apples",
h#td: "Bananas"
}
},
f#table: {
f#name: "African Coffee Table",
f#width: "80",
f#length: "120"
}
}
}
次の例は、CData
型を使用して XML 出力内で CDATA 要素を作成する方法を示しています。
String
に CDATA があるかどうかを確認次の例は、提供された String
値が CDATA かどうかを示しています。
この XML が DataWeave ソースへの入力ペイロードとして機能します。test
要素に CDATA ブロックが含まれていることに注意してください。
<?xml version='1.0' encoding='UTF-8'?>
<test><![CDATA[A text <a>]]></test>
inlineCloseOn
ライタープロパティを使用次の例では、inlineCloseOn
ライタープロパティを値 none
と共に使用して、入力からのキー-値ペアに基づいてアクションを実行します。
XML は反復 (無制限) 要素を使用してコレクションをエンコードします。DataWeave では、同じキーを繰り返して無制限の要素を表します。
次の例は、オブジェクトの JSON 配列内の反復キーを反復 XML 要素に変換する方法を示しています。
この JSON 入力が DataWeave ソースへのペイロードとして機能します。配列内の name
キーが反復していることに注意してください。
{
"friends": [
{"name": "Mariano"},
{"name": "Shoki"},
{"name": "Tomo"},
{"name": "Ana"}
]
}
DataWeave スクリプトは、friends
キーの値を選択します。
%dw 2.0
output application/xml
---
friends: {
(payload.friends)
}
出力では、name
キーが XML 要素として表されます。
<?xml version='1.0' encoding='UTF-8'?>
<friends>
<name>Mariano</name>
<name>Shoki</name>
<name>Tomo</name>
<name>Ana</name>
</friends>
「自己終了 XML タグの出力」の例も参照してください。
この例では、Id
、Name
、Address
など、従業員の詳細を含む XML ファイルを反復処理して、ファイルを JSON 形式に変換します。DataWeave スクリプトでは、replace
関数を使用して各 Address
要素を反復処理し、文字 -
と /
を空白スペースに置き換えます。
この XML 入力が DataWeave ソースへのペイロードとして機能します。Address
要素に -
と /
の文字が含まれていることに注意してください。
<?xml version='1.0' encoding='UTF-8'?>
<root>
<employees>
<Id>1</Id>
<Name>Mule</Name>
<Address>MuleSoft Avenue - 123</Address>
</employees>
<employees>
<Id>2</Id>
<Name>Max</Name>
<Address>MuleSoft Avenue-456/5/e</Address>
</employees>
</root>
次の DataWeave スクリプトでは、ペイロード要素を反復処理して、オブジェクトへのマッピングを実行します。payload01.Address replace /([\-\,\/])/ with " "
の指示により、-
と /
の文字が空白スペースに置き換えられます。
%dw 2.0
output application/json
---
payload.root.*employees map ((payload01 , indexOfPayload01) ->
{
Id: payload01.Id as String,
Name: payload01.Name as String,
Address: payload01.Address replace /([\-\,\/])/ with " "
}
)
次の DataWeave スクリプトは、DocType
値が含まれる XML 入力ペイロードを JSON に変換します。式 payload.^docType
を使用して、その文書型ディレクティブの値を抽出します。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE cXML SYSTEM "http://xml.cxml.org/schemas/cXML/1.2.014/cXML.dtd">
<cXML xml:lang="en-US" payloadID="1615232861.000506@prd327utl1.int.coupahost.com" timestamp="2021-03-08T11:47:42-08:00">
<Header>
<From>
<Credential domain="NetworkID">
<Identity>TestIdentity</Identity>
</Credential>
</From>
<To>
<Credential domain="TEST">
<Identity>Identity</Identity>
</Credential>
</To>
</Header>
</cXML>
次の例は、docType
メタデータを使用して XML 出力内で DocType
値を作成する方法を示しています。
%dw 2.0
output application/xml
ns xml http://www.w3.org/XML/1998/namespace
var cXmlObj = {
cXML @(payloadID: "9949494", xml#lang: "en-US", timestamp: "2002-02-04T18:39:09-08:00"): {
Header: {
From: {
Credential @(domain: "NetworkId"): {
Identity: "Identity"
}
}
}
}
} as Object {
docType: { rootName: "cXML", systemId: "http://xml.cXML.org/schemas/cXML/1.2.014/cXML.dtd" }
}
---
cXmlObj
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE cXML SYSTEM "http://xml.cXML.org/schemas/cXML/1.2.014/cXML.dtd">
<cXML payloadID="9949494" xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:lang="en-US" timestamp="2002-02-04T18:39:09-08:00">
<Header>
<From>
<Credential domain="NetworkId">
<Identity>Identity</Identity>
</Credential>
</From>
</Header>
</cXML>
次の例では、Dtd Module (dw::xml::Dtd) を使用して、systemId
が含まれる DocType
値を文字列表現に変換します。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE cXML SYSTEM "http://xml.cxml.org/schemas/cXML/1.2.014/cXML.dtd">
<cXML xml:lang="en-US" payloadID="1615232861.000506@prd327utl1.int.coupahost.com" timestamp="2021-03-08T11:47:42-08:00">
<Header>
<From>
<Credential domain="NetworkID">
<Identity>Identity</Identity>
</Credential>
</From>
<To>
<Credential domain="TEST">
<Identity>Identity</Identity>
</Credential>
</To>
</Header>
</cXML>
DataWeave では、この形式の以下の設定プロパティがサポートされています。
この形式は、入力データを読み取るための指示を提供するプロパティを受け入れます。
パラメーター | 型 | デフォルト | 説明 |
---|---|---|---|
|
|
|
コレクションが配置されているドキュメント内の場所へのパスを設定します。ストリーミングする要素の場所を識別するパス式を受け入れます。 |
|
|
|
外部エンティティを処理するかどうかを示します。デフォルトでは、XML 外部エンティティ (XXE) 攻撃を回避するために無効になっています。 有効な値は、 |
|
|
|
しきい値に達したとき、デフォルトでインデックス付きリーダーを使用します。US-ASCII、UTF-8、および ISO-8859-1 エンコードのみをサポートします。他のエンコードの場合、DataWeave ではメモリ内リーダーを使用します。 有効な値は、 |
|
|
|
XML 属性で受け入れられる最大文字数を設定します。 Mule 4.2.1 以降で使用できます。 |
|
|
|
エンティティ拡張の最大数を設定します。この制限は Billion Laughs 攻撃の回避に役立ちます。 |
|
|
|
空または空白のテキストを含む要素を 有効な値は |
|
|
|
使用する XML パーサーの最適化の種別を設定します。 有効な値は、 |
|
|
|
有効な値は、 |
|
|
|
DTD サポートを有効または無効にします。無効にすると、内部および外部のサブセットがスキップされ、処理されません。Mule システムプロパティ 有効な値は、 |
この形式は、出力データを書き込むための指示を提供するプロパティを受け入れます。
パラメーター | 型 | デフォルト | 説明 |
---|---|---|---|
|
|
|
バッファライターのサイズ。値は 8 よりも大きい必要があります。 |
|
|
|
出力 XML のデフォルトの名前空間を指定します。 |
|
|
|
有効な値は、 |
|
|
|
有効な値は、 |
|
|
|
出力で使用するエンコード (UTF-8 など)。 |
|
|
|
有効な値は、 |
|
|
|
有効な値は、 |
|
|
|
デフォルトでは出力をインデントして読みやすくします。 有効な値は、 |
|
|
|
インラインの終了タグを出力します。この値が 有効な値は、 |
|
|
|
有効な値は |
|
|
|
指定されたデータ構造の
有効な値は |
|
|
|
有効な値は、 |
|
|
|
XML のルート要素内の宣言する名前空間をマークします。
|
|
|
|
このプロパティが 有効な値は、 |