11 février 2004

Trouver la position d'un noeud à partir du xsl:template qui lui est associé ...

Si avec le document XML suivant :


<records>
    <record>  truc      </record>
    <record>  bidule    </record>
    <record>  chouette  </record>
</records>

On souhaite obtenir le tableau suivant :


1 | truc
2 | bidule
3 | chouette

et bien on aura le template suivant :


<xsl:template match="record">

  <xsl:value-of select="count(./preceding-sibling::record) + 1" />
  <xsl:text> | </xsl:text>
  <xsl:value-of select="text()" />

</xsl:template>

biensûr on aurait pu également l'écrire comme ceci :


<xsl:template match="records">

  <xsl:for-each select="record">
    <xsl:value-of select="position()" />
    <xsl:text> | </xsl:text>
    <xsl:value-of select="text()" />
  </xsl:for-each>
</xsl:template>

L'utilisation de la fonction position() à la place de count(./preceding-sibling::record) + 1n'aurait pas donné le même résultat.