Loop

www.altova.com このトピックを印刷 前のページ 1つ上のレベル 次のページ

ホーム >  アクション > If、Loop、Let、トライ/キャッチ、スロー >

Loop

ループアクション (下のスクリーンショットを参照) は、 [For Each] と [以下の条件の場合ループを中断する] 設定を使用して定義するアイテムのシーケンスを反復します。ループ内では、各反復中に実行されるアクションのセットを定義することができます。 例えば、下のスクリーンショットの各反復では、 [ノードの追加] アクションが実行されます。

MTDLoop

[For Each] と [ループを中断する] 設定の XPath式により反復されるループのシーケンスは定義されます。注意する重要なポイントは以下の通りです。

 

For Each:  XPath 式 (例えば: 1 から 7) 内で名前を付けられた、または、) XML ツリー内のツリー要素から取得されたシーケンスであることができます。 (例えば: $XML1/Products/Product$XML1 ツリー内の全ての Product 要素を選択します。ループの中断設定がなされている場合、すべての反復が完了すると、ループを終了します。
Loop 変数: ループ変数は、現在反復されているシーケンスのアイテムを持つ変数です。ループ変数は、サインの後の最初のクリックの後入力される名前で識別されます。 上のスクリーンショットでは、ループ変数の名前は MyLoop です。この変数は、名前 ($MyLoop) の前に $ サインを持ち、他の XPath 変数と同様参照されます。 変数は、ループ内が対象範囲であり、これは、ループの範囲外の XPath 式内の変数を参照することができないことを意味します。上のスクリーンショットでは、ループ変数は、ノードへ追加内の [新しいノード] 設定で内で参照されています。これは、 ノードへ追加アクションがループ内で作成されており、変数はこのポイントではスコープの範囲内であり、妥当な参照です。
ループを中断する: この XPath 式は、各反復の前に評価されます。式が true() を評価する場合、ループが実行されます。 上のスクリーンショットでは、 XPath 式 Product='' では、最初の空の Product 要素が発生した場合、ループが実行されます。  (コンテキストノードは Products です。ですから、相対ロケーターパスは有効です。) [ループを中断する] 設定は、上のスクリーンショットで表示されるように、 [For Each] 設定と共に使用することができます。 または、個別に設定することができます。

 

メモ:変数が(ツリーとして既知の)ノードセットを含む場合、このノードセットはロックされループアクション内のアクションにより変更することはできません。上のスクリーンショットでは、新規のノードが ノードに追加 アクションに追加され、他の XML ツリー ($XML2) に追加されます。以下のように反復されるシーケンスを変更することができます: ノードに対して直接反復するかわりに、ノードシーケンスに繋がれている複数のシーケンスに対して反復します。 例えば、上のスクリーンショット内の Product ノードのシーケンスに対して反復する代わりに、 ノードシーケンスにつながれている数値の範囲に対して反復することができます。For Each 設定の XPath 式は、 $XML1/Products/Product から for $i in 1 to count($XML1/Products/Product) return $i に変更することができます。これは反復されている数のシーケンスです。 (ループ内の現在の Product ノードは XPath 式によりアクセスすることができます: $XML1/Products/Product[$i])。

 

上のスクリーンショットで定義されているアクションは、重複するツリーフラグメントを作成します。ページがロードされると、ループアクションが $XML1/Products/Product 要素に対して反復します。各反復の間、現在の Product ノードは、 MyLoop 変数に保管されます。 ($MyLoop 変数内の) Product ノードは、 $XML2/Products ノードの最後の子として追加されます。ループは、最後の Product 要素が $XML1/Products から $XML2/Products へコピーされるまで継続されます。 下のスクリーンショットを参照。

MTDLoopDataCopy

 


(C) 2019 Altova GmbH