XSLストアノードセットの変数

xslt
XSLストアノードセットの変数

(XSLT 1.0。)次を含む行と呼ばれる変数が与えられた場合(例):

入力

      can be filtered by filter 1
      can be filtered by filter 2
      can be filtered by filter 3

     ...

3つのフィルター変数があります。 各フィルターについて、フィルター変数が空でない場合、上記の入力にフィルターを適用したいと思います。 フィルターされた結果、フィルターに一致するアイテムを新しい変数に保存したいです。 以下を試しましたが、「ノードセットではなく結果ツリー」であるというエラーメッセージ(filterResult)を受け取りました。 デバッガーを使用して決定したように、Rows変数はノードセットです。

  • XSLの一部*

copy-ofはノードセットではなく結果ツリーを生成することを認識していますが、上記の3つのフィルター要件を考慮してノードセットを生成する方法はわかりません。

追加情報

私はノードセットを含む変数を作成するようなことを行うことができることを知っていますが、多くの可能性のある条件(3つのフィルターが与えられている)があるので、それがどのように役立つかわかりません。

  8  2


ベストアンサー

XSLT 1.0では、ソースドキュメントからノードのセットを含む変数を作成する唯一の方法は、 `select`属性でXPath式を評価することです。

copy-of、` apply-templates`、または `call-template`は使用できません。これらはすべて結果ツリーのフラグメントを生成します。

私が知っているすべてのXSLTプロセッサは、結果ツリーのフラグメントをノードセットに変換する拡張機能を実装しているため、トランスフォームを完全にクロスプラットフォームにする必要がない限り、このようなことができます(この例ではMicrosoftのXSLTプロセッサを使用しています):

ただし、これを行う必要はありません。Alejandroが指摘したように、1つのXPath式を記述するだけで、目的の結果を得ることができます。 ノードの選択が非常に複雑なため、 `node-set()`関数を使用する必要があるアプリケーションがありますが、それらはそれらの1つではありません。

11


`$ Rows`変数はResult Tree Fragment型のインスタンスのようです。

文字列操作以外のRTFでの操作( `[]`フィルター式で提供される操作など)は実行できません:http://www.w3.org/TR/xslt#section-Result-Tree-Fragmentsから

_
結果ツリーのフラグメントに対する操作は、その操作が文字列に対して許可される場合にのみ許可されます(文字列に対する操作には、最初に文字列を数値またはブール値に変換することが含まれる場合があります)。 特に、結果ツリーの断片に対して ///、および `[]`演算子を使用することは許可されていません。
_

それに加えて、 `$ Rows`が次のようなノードセットデータ型のインスタンスである場合、表示されるコードはすべて簡略化できます。

ノードセットへのRTFのhttp://www.exslt.org/exsl/functions/node-set/index.html [node-set()]拡張機能の実装を提供するXSLTプロセッサ(ほとんどすべて)があります。変換。

7


タイトルとURLをコピーしました