パラメータとノード

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

ホーム >  SPS ファイル: 追加機能 > ユーザー定義 XPath 関数 > XPath 関数内のパラメーター >

パラメータとノード

XPath 関数にてノードを選択するパラメーターを使用する場合、関数がデザイン内のどこから呼ばれるかに関わらず、その関数にはコンテキストノードが与えられていないということに注意する必要があります。関数の定義内(関数ボティーペイン)で使用される XPath 条件式か、XPath 関数を呼び出す際に使用する XPath 条件式にてコンテキストノードを取得することができます。後者の場合、関数呼び出しの引数としてコンテキストノードが与えられることになります。

 

以下のスクリーンショットに示される、3つのパラメーターとともに定義された Stock() というユーザー定義 XPath 関数を考えてみましょう

 

XPFxParams

 

関数ボディーにおける定義は $ContextStock[@name=$Selection]/$StockInfo となっており、3つの XPath パラメーターが使用されているものの、コンテキストノードの情報は含まれていません。コンテキストノードの情報は、以下の例にあるように、この関数を呼び出す XPath 条件式から与えられることになります:

 

      sps:Stock( $XML/Trades/Stock, $XML/Trades/Selection/Stock, @name )

 

関数呼び出しでは3つの引数が使用されており、コンテキストノードの情報として使用される値とノードの識別を行うための情報が与えられます。以下の XPath 条件式により関数を呼び出し、同様の結果を得ることもできます:

 

      sps:Stock( /Trades/Stock, /Trades/Selection/Stock, @name )

      sps:Stock( /Trades/Stock, //Selection/Stock, @name )

 

デザインコンポーネントの XPath 条件式では、コンテキストノードが分かっているため、デザインコンポーネントにて使用される関数の呼び出しでは、ドキュメントルートを表す $XML 変数を使用する必要は必ずしもありません。

 

上に示される関数呼び出しには、定義された3つの XPath パラメーターに対して、それぞれ3つの引数値が与えられていることに注目してください。

 

·

$ContextStock = $XML/Trades/Stock (/Trades/Stock 要素)

·

$Selection = $XML/Trades/Selection/Stock (/Trades/Selection/Stock 要素)

·

$StockInfo = @name

 

関数定義における XPath 条件式は以下のようになります:

 

      $ContextStock[@name=$Selection]/$StockInfo

 

引数が渡されることで、関数定義における XPath 条件式は以下のようになります:

 

      $XML/Trades/Stock[@name=$XML/Trades/Selection/Stock]/@name

 

関数に渡されるのはテキスト文字列ではなく、ノードセットであるという点に留意してください。

 

これにより、XPath パラメーターを介したコンテキストノードの受け渡しが行われ、その後関数にて目的のノードが特定、返されることになります。

 

 


(C) 2019 Altova GmbH