Comment obtenir un compteur dans la boucle xsl: for-each qui refléterait le nombre d'élément en cours traité.
Par exemple, mon XML source est
<books>
<book>
<title>The Unbearable Lightness of Being </title>
</book>
<book>
<title>Narcissus and Goldmund</title>
</book>
<book>
<title>Choke</title>
</book>
</books>
Ce que je veux, c'est:
<newBooks>
<newBook>
<countNo>1</countNo>
<title>The Unbearable Lightness of Being </title>
</newBook>
<newBook>
<countNo>2</countNo>
<title>Narcissus and Goldmund</title>
</newBook>
<newBook>
<countNo>3</countNo>
<title>Choke</title>
</newBook>
</newBooks>
Le XSLT à modifier:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<newBooks>
<xsl:for-each select="books/book">
<newBook>
<countNo>???</countNo>
<title>
<xsl:value-of select="title"/>
</title>
</newBook>
</xsl:for-each>
</newBooks>
</xsl:template>
</xsl:stylesheet>
La question est donc de savoir quoi mettre à la place de ???. Existe-t-il un mot clé standard ou dois-je simplement déclarer une variable et l'incrémenter à l'intérieur de la boucle?
Comme la question est assez longue, je devrais probablement m'attendre à une réponse en une ligne ou en un mot :)
xsl:if
à l'intérieur duxsl:for-each
? Qu'est-ce qu'un «compteur approprié»? Pouvez-vous indiquer une ressource?Essayez d'insérer
<xsl:number format="1. "/><xsl:value-of select="."/><xsl:text>
à la place de ???.Notez le "1" - c'est le format des nombres. Plus d'infos: ici
la source
<xsl:number format="1. " value="position()"/>
Essayer:
Edit - il y a eu un gel du cerveau, la position () est plus simple!
la source
Vous pouvez également exécuter des instructions conditionnelles sur la position (), ce qui peut être très utile dans de nombreux scénarios.
par exemple.
la source
la source