2009-08-03 9 views
7

私はXSLTテンプレートを編集していて、スキルは少し錆びています。xsltは、ノードがその親の最初のX子の1つであるかどうかを調べるためにテストします。

現在のノードがその親の最初の3つの子ノードにあるかどうかを確認するための条件を書いておきたいと思います。

<parent> 
<child> 
<child> 
<child> 
<child> 
</parent> 

だから最初の3つのつの子要素は、上記trueを返すだろうが、第四は、子要素がすべて同じではありませんし、自分の子孫を持つことになり問題を複雑にするために、falseを返します。私はそれを行う簡単なxpathがあると確信しています。

答えて

17

状況によって異なります。あなたは

<xsl:apply-templates select="/parent/child" /> 

の途中である場合次に行います

<xsl:if test="position() &lt; 4"> 

でチェック。あなたが他のすべての文脈、つまり<child>要素に影響しない文脈であれば、position()は、内の位置を参照し、その文脈はです。

あなたは文脈自由のチェックをしたい場合は、あなたが使用することができます。

<xsl:if test="count(preceding-sibling::child) &lt; 3"> 
<!-- or --> 
<xsl:if test="count(preceding-sibling::*) &lt; 3"> 

のみ最初の3つの<child>の要素を選択し、これは次のようになります。

/parent/child[position() &lt; 4] 
+1

グレート答えのおかげで –

0

position()関数を呼び出して、ノードがドキュメント内のどこに存在するかを判断します。

関連する問題