Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Devuelve la posición, o número de índice, del nodo con respecto a todos los nodos seleccionados de la lista de nodos.
number position()
Comentarios
La posición del nodo es de base 1, por lo que el primer nodo devuelve una posición de 1.
Ejemplo
En el código de ejemplo siguiente se muestran los efectos de la función position().
Archivo XML (position.xml)
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="position.xsl"?>
<test>
<x a="a11">
<x a="a21">
<x a="a31">
<y b="b31">y31</y>
<y b="b32">y32</y>
</x>
</x>
</x>
<x a="a12">
<x a="a22">
<y b="b21">y21</y>
<y b="b22">y22</y>
</x>
</x>
<x a="a13">
<y b="b11">y11</y>
<y b="b12">y12</y>
</x>
<x a="a14">
<y b="b01">y01</y>
<y b="b02">y02</y>
</x>
</test>
Archivo XSLT (position.xsl)
<?xml version='1.0'?>
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml"
omit-xml-declaration="yes"/>
<xsl:template match="/">
<xsl:apply-templates select="//x"/>
</xsl:template>
<xsl:template match="*">
<xsl:element name="{name()}">
<xsl:apply-templates select="@*"/>
<xsl:value-of select="position()"/>
</xsl:element>\n
</xsl:template>
<xsl:template match="@*">
<xsl:attribute name="{name()}">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:template>
</xsl:stylesheet>
Resultados
La hoja de estilos XSLT anterior, cuando se aplica al archivo XML de origen, asigna todos los elementos <x> a nuevos elementos <x> cuyo contenido mantiene su posición en el orden del documento.
<x a="a11">1</x>
<x a="a21">2</x>
<x a="a31">3</x>
<x a="a12">4</x>
<x a="a22">5</x>
<x a="a13">6</x>
<x a="a14">7</x>
Para ilustrar la dependencia de la función position() con respecto al contexto desde el que opera, vamos a sustituir la siguiente regla de plantilla (del archivo XSLT anterior):
<xsl:template match="/">
<xsl:apply-templates select="//x"/>
</xsl:template>
por esta otra:
<xsl:template match="/">
<xsl:apply-templates select="//x[1]"/>
</xsl:template>
El resultado es el siguiente:
<x a="a11">1</x>
<x a="a21">2</x>
<x a="a31">3</x>
<x a="a22">4</x>
Por otro lado, si sustituimos la regla de plantilla por la siguiente:
<xsl:template match="/">
<xsl:apply-templates select="//x[2]"/>
</xsl:template>
obtenemos el siguiente resultado:
<x a="a12">1</x>