XSLT-Inkrement-variable in der for-each Schleife funktioniert nicht
Mein input-XML:
<Citizens>
<Category type="Plumbers">
<Citizen>John</Citizen>
</Category>
<Category type="Doctors">
<Citizen>Ram</Citizen>
<Citizen>Kumar</Citizen>
</Category>
<Category type="Farmers">
<Citizen>Ganesh</Citizen>
<Citizen>Suresh</Citizen>
</Category>
</Citizens>
Hatte ich versucht, die folgende XSLT-zählen Citizen
irrelevant Category
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:variable name="citizenTotal" select="0" />
<xsl:for-each select="Citizens/Category">
<xsl:variable name="currentCount" select="count(Citizen)" />
<xsl:variable name="citizenTotal" select="$citizenTotal+$currentCount" />
</xsl:for-each>
Total Citizen nodes: <xsl:value-of select="$citizenTotal"></xsl:value-of>
</xsl:template>
</xsl:stylesheet>
Die erwartete Ausgabe ist 5 , aber es gibt 0, was die initiierten Wert außerhalb for-each
. Ich bin fehlende /messing mit <xsl:variable/>
für Ihren Anwendungsbereich. Ich habe gerade versucht, was ich in der Regel nicht mit JSLT, wo der Umfang ist page
standardmäßig. So etwas in XSLT zu schweigen von den Gültigkeitsbereich von Variablen in XSLT ?
InformationsquelleAutor Sridhar | 2013-07-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das problem ist, dass die Variablen sind unveränderlich in xslt. Nach der Einstellung ist es nicht möglich es zu ändern.
So weisen Sie citizenTotal = 0. Obwohl Sie eine andere "Zuordnung" der variable mit dem gleichen Namen in der for-each-Sie sind - in der Tat - erklärt, eine neue variable im Rahmen des Zyklus der Schleife. Wenn Sie die exit for-each-Sie sind außerhalb der Reichweite von es - du hast nur die Variablen, die Sie deklariert vor, die Schleife und es wird auf null gesetzt.
Wenn Sie müssen die Gesamtzahl der Bürger, Sie könnten es tun ohne Zyklus mit xpath
count(//Citizens/Category/Citizen)
InformationsquelleAutor Jirka Š.
In XSL 1.0 können Sie nicht Schrittweite eine Globale variable. Dies können Sie erreichen, Zeug durch die
Jedoch in XSLT 2.0 können Sie die Globale variable durch Sächsische in name space
Erstellung von Variablen
Inkrement
<xsl:value-of select="count(//Citizens/Category/Citizen)" />
könnte genug ist.Du hast Recht @Jirka Š.
Saxon != XSLT 2.0. XSLT 2.0 ist ein standard, in dem Sie sich immer noch nicht ändern, eine variable, nachdem es erstellt wurde. Saxon haben kann extension, mit dem eine veränderbare variable.
Vielen Dank für Ihre Informationen über saxon. @vels4j
InformationsquelleAutor vels4j