Zähler innerhalb xsl: für-jede Schleife
Frage
Wie ein Zähler innerhalb xsl erhalten:. Foreach-Schleife, die die Anzahl der aktuellen Element verarbeitet widerspiegeln würde
Zum Beispiel meiner Quelle XML
<books>
<book>
<title>The Unbearable Lightness of Being </title>
</book>
<book>
<title>Narcissus and Goldmund</title>
</book>
<book>
<title>Choke</title>
</book>
</books>
Was ich will, bekommen, ist:
<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>
Die XSLT zu ändern:
<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>
Die Frage ist also, was anstelle von ??? zu setzen. Gibt es ein Standard-Schlüsselwort oder ich muß einfach eine Variable deklarieren und erhöhe es innerhalb der Schleife?
Da die Frage ist ziemlich lange ich wahrscheinlich eine Zeile oder ein Wort Antwort erwarten sollte:)
Lösung
position()
. Z.
<countNo><xsl:value-of select="position()" /></countNo>
Andere Tipps
Versuchen <xsl:number format="1. "/><xsl:value-of select="."/><xsl:text>
an der Stelle ??? eingefügt wird.
Beachten Sie die „1“ - das ist das Zahlenformat. Weitere Informationen: hier
Versuchen:
<xsl:value-of select="count(preceding-sibling::*) + 1" />
Bearbeiten - hatte ein Gehirn einfrieren dort, Position () ist einfacher
Sie können auch bedingte Aussagen über die Position () ausgeführt werden, die in vielen Szenarien sehr hilfreich sein können.
für zB.
<xsl:if test="(position( )) = 1">
//Show header only once
</xsl:if>
<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><xsl:value-of select="position()"/></countNo>
<title>
<xsl:value-of select="title"/>
</title>
</newBook>
</xsl:for-each>
</newBooks>
</xsl:template>
</xsl:stylesheet>