2009-08-03 6 views
7

Estoy editando una plantilla XSLT y mis habilidades están un poco oxidadas.xslt prueba para ver si un nodo es uno de los primeros X hijos de su elemento primario

Me gustaría escribir una condición para ver si el nodo actual está en los primeros tres nodos secundarios de su principal.

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

Así que los tres primeros elementos secundarios anteriormente volvería cierto, pero el cuarto volvería falsa, para complicar las cosas los elementos secundarios no serán todos del mismo y tendrá descendientes de su propia cuenta. Estoy seguro de que hay un simple xpath que lo hará.

Respuesta

17

Depende de la situación. Si se encuentra en el medio de

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

Luego de comprobar con

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

va a hacer. Si se encuentra en otro contexto, uno que no afecta a todos los elementos <child>, entonces position() se referirá a la posición dentro de contexto.

Si desea una verificación independiente del contexto, puede utilizar:

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

Para seleccione sólo los tres primeros elementos <child>, esta sería la misma:

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

Gran respuesta gracias –

0

Llame a la función position() para determinar dónde existe un nodo en un documento.

Cuestiones relacionadas