Cómo obtener un contador dentro de xsl: for-each loop que reflejaría el número de elemento actual procesado.
Por ejemplo, mi XML de origen es
<books>
<book>
<title>The Unbearable Lightness of Being </title>
</book>
<book>
<title>Narcissus and Goldmund</title>
</book>
<book>
<title>Choke</title>
</book>
</books>
Lo que quiero conseguir es:
<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>
El XSLT para modificar:
<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>
Entonces la pregunta es qué poner en lugar de ???. ¿Existe alguna palabra clave estándar o simplemente debo declarar una variable e incrementarla dentro del ciclo?
Como la pregunta es bastante larga, probablemente debería esperar una respuesta de una línea o una palabra :)
xsl:if
dentro delxsl:for-each
? ¿Qué es un "contador adecuado"? ¿Puedes señalar algún recurso?Intente insertar
<xsl:number format="1. "/><xsl:value-of select="."/><xsl:text>
en el lugar de ???.Tenga en cuenta el "1": este es el formato de número. Más info: aquí
fuente
<xsl:number format="1. " value="position()"/>
Tratar:
Editar : tenía el cerebro congelado allí, ¡la posición () es más sencilla!
fuente
También puede ejecutar declaraciones condicionales en Postion () que pueden ser realmente útiles en muchos escenarios.
por ej.
fuente
fuente