2009-08-03 11 views
7

Je suis en train d'éditer un template XSLT et mes compétences sont un peu rouillées.xslt test pour voir si un noeud est l'un des X premiers enfants de son parent

Je voudrais écrire une condition pour voir si le nœud actuel est dans les trois premiers nœuds enfants de son parent.

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

Ainsi, les trois premiers éléments de l'enfant serait au-dessus de retour vrai, mais le quatrième retourneraient faux, pour compliquer les choses les éléments enfants ne seront pas tous les mêmes et auront des descendants de leurs propres. Je suis sûr qu'il y a un simple xpath qui le fera.

Répondre

17

Cela dépend de la situation. Si vous êtes au milieu de

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

vérifier ensuite avec

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

fera. Si vous êtes dans un autre contexte, celui qui n'affecte pas tous les éléments <child>, alors position() renverra à la position dans que contexte.

Si vous souhaitez un contrôle hors-contexte, vous pouvez utiliser:

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

À sélectionner seulement les trois premiers éléments <child>, ce serait elle:

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

Grande réponse merci –

0

Appelez la fonction position() pour déterminer l'emplacement d'un noeud dans un document.

Questions connexes