XMLMerge - XMLのマージ

ひとつ以上の入力のXMLに対して更新箇所をXPathで指定して、別のノードを差し込みます。

■ストリーム情報

入力フォーマットXML
接続数無制限
出力フォーマットXML
説明ベースとするXML で指定された入力のXMLを更新したXML

■コンポーネントプロパティ

名前プロパティ型マッピング説明
ベースとするXMLcomponentName- 入力ストリームのうち、更新のベースとなるストリームを出力したコンポーネント名を指定します。
このプロパティで指定したコンポーネントの出力ストリームはストリームコンテナであってはいけません。
更新category-ベースとするXML で指定されたXMLに対する更新内容を定義します。
詳しくは、下記トピック「更新内容の定義」を参照してください。
ローカル変数category入力&出力 コンポーネント内でのみ有効なローカル変数を定義します。
式中では「$local.変数名」として参照できます。

■トランザクション処理

コミット何もしません。
ロールバック何もしません。

■エラー処理

タイプパラメーターエラー処理フロー
へのストリーム
エラー
コード
説明
汎用 なし コンポーネントの入力ストリーム なし XPath式が不正な場合

■更新内容の定義

対象XPath式参照XPath式は、XPath式エディタを使ってXMLのツリーからの選択により自動生成したXPathをプロパティに指定することができます。詳細については下記トピック「XPath式エディタ」を参照してください。

対象XPath式

更新対象の要素または属性を指定するためのXPath式を指定します。
式にマッチするノードがなかった場合、何もしません。
式にマッチするノードが要素または属性以外だった場合、エラーになります。
式にマッチするノードが複数存在した場合、最後のノードに対して更新を行います。キーが指定された場合はその条件に合致するノードに対して更新を行います。

キー

対象XPath式で選択されたノードをコンテキストとしてキーとなる値を指定するためのXPath式を指定します。
この式によって取得された値は参照XPath式の式中で「$KEY」という変数で参照することができます。
キーを指定しなかった場合(または参照XPath式の式中で「$KEY」が条件として使用されなかった場合)、 対象XPath式にマッチするノードが複数存在したとしても、最後のノードにのみ更新を行います。

参照元XML

参照XPath式を適用するXMLを出力したコンポーネントの名前を自動的に作成されたコンポーネント名プルダウンリストから選択します。ここで指定されたコンポーネントの出力はストリームコンテナ(例えばFileGetコンポーネントで「*.xml」を読み込んだ場合)であってもかまいません。
対象XPath式で選択されたノードが要素の場合は、コンテナ内のすべてのXMLに対して参照XPath式が適用されて挿入対象のノードリストを作成します。
対象XPath式で選択されたノードが属性の場合は、コンテナ内の最初のXMLにのみ参照XPath式が適用されます。

参照XPath式

対象XPath式で選択されたノードに差し込む内容を指定するためのXPath式を指定します。
通常の変数類の他に「$KEY」という変数を使用することができます。
対象XPath式で選択されたノードが複数ある場合、「$KEY」変数の値はノードごとに変わるので、 それに応じた内容を取得するための式を記述することができます。

対象XPath式で選択されたノードが要素だった場合

- 参照XPath式の返り値が属性であれば、そこにその属性が差し込まれます。
- 参照XPath式の返り値がそれ以外のノードであれば、そこに子としてそのノードが差し込まれます。
- 参照XPath式の返り値が関数などの返り値であれば、そこに子としてその値が差し込まれます。

対象XPath式で選択されたノードが属性だった場合

- 参照XPath式の返り値をstring関数で評価した結果が、その属性値として差し込まれます。

■変数の使用

XPath式の中ではローカル変数の他にフロー変数とシステム変数が使用できます。
(外部変数セットは使用することができません。)

フロー変数$flow.<フロー変数名>
システム変数$system.<システム変数名>(英語名)
ローカル変数$local.<変数名>

変数を使用することにより条件にあうノードだけを選択する式を書くことも可能です。

例) /root/record[@id=$local.var1]

■名前空間の解決

式中の名前空間プレフィクスの解決は、入力ストリームのフィールド定義中の名前空間定義によって行われます。
このコンポーネントのフィールド定義ではないことに注意してください。

■XPath式エディタ

XPath式エディタはプロパティ値にXPathを指定する場合にその入力をサポートするためのエディタです。ツリーからノードを選択してそこまでのXPathをプロパティに設定することができます。
XPathを指定するフィールドの右にある「...」をクリックすると起動します。

ツリー

ツリーにはXPathの対象となるストリームのフィールド定義が表示されます。例えば、XPathNodesetコンポーネントでは入力ストリームがXPathの対象となり、そのフィールド定義が表示されます。コンポーネントの入力側にリンクが繋がっていない場合、入力ストリームにフィールド定義がされていない場合は初期状態では何も表示されません。

「サンプル参照」ボタン

任意のXMLを読み込み、その構造をツリーに表示させることができます。また、ツリーで選択したノードの値(属性値または要素内容)が値タブに表示され、それを条件式の指定に利用することができます。

  1. 「サンプル参照」ボタンをクリックして表示される「開く」ダイアログボックスから読み込むXMLを選択します。
  2. XMLの構造が解析されてツリーに表示されます。

「サンプルをxfpに保存する」チェックボックス

サンプル参照からXMLを読み込んでいる場合、「サンプルをxfpに保存する」チェックボックスをオンにすると、読み込んだXMLがxfpファイル(プロジェクトファイル)に保存され、次回にxfpファイルを開いた場合同じXMLを参照することができます。チェックボックスがオフの場合、読み込んだXMLはエディタを保存されません。次回に使用したい場合は再度「サンプル参照」ボタンから読み込みます。

注意:サンプルXMLはコンポーネントの実行に必要な情報ではありません。ファイルサイズの大きなXMLを保存するとxfpファイル(プロジェクトファイル)のファイルサイズが大きくなり、保存やコンパイルにかかる時間も増えるため開発やテストの段階のみ保存するようにしてください。

XPathの設定

ツリーでノードを選択すると、そのXPathが「選択パス」欄に表示されます。「選択パスをXPathにコピー」のボタンを押すとそのパスが「XPath」欄にコピーされます。 「XPath」欄は編集可能なテキストフィールドで、複雑なXPathを指定する場合はそこに直接記述することができます。

変数を条件式に設定する

フロー変数やローカル変数などコンポーネントで使用可能な変数は変数タブにリストされています。
ツリーで選択したパスがXPathの一部を構成する場合は「選択パスへの条件とする」ボタンで変数との比較をXPathに追加することができます。

XPath/School/Class/Student
選択パス/School/Class/@name
変数$flow.var1
条件追加後のXPath/School/Class[@name=$flow.var1]/Student

選択パス「/School/Class/@name」はXPathで指定されている「/School/Class/Student」の上位に存在するので、条件式として設定することができます。 選択パスが「/School/Class/Teacher/@name」のようにXPathとは別のパスを指している場合は「選択パスへの条件とする」ボタンは無効となります。

値を条件式に設定する

サンプルXMLを参照している場合は選択パスに実際に設定されている値が値タブにリストされています。 ツリーでの選択パスがXPathの一部を構成する場合は「選択パスへの条件とする」ボタンで値との比較をXPathに追加することができます。

XPath/School/Class/Student
選択パス/School/Class/@name
1組
条件追加後のXPath/School/Class[@name="1組"]/Student

条件追加が可能なルールは変数の場合と同じです。