Привет, у меня есть следующий xml
<?xml version="1.0" encoding="UTF-8"?>
<root>
<item>
<name>john</name>
<year>2010</year>
</item>
<item>
<name>sam</name>
<year>2000</year>
</item>
<item>
<name>jack</name>
<year>2007</year>
</item>
<item>
<name>smith</name>
<year>2010</year>
</item>
</root>
Я использую следующий xslt для группировки по годам
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml">
<xsl:template match="/">
<xsl:for-each-group select="r//*[(name=*)]" group-by="year">
<xsl:sort select="year" order="descending"/>
<xsl:variable name="total" select="count(/r//*[(name=*)]) + 1" />
<xsl:value-of select="year"/><br />
<xsl:for-each select="current-group()/name">
<xsl:variable name="i" select="position()"/>
<xsl:call-template name="row">
<xsl:with-param name="name" select="."/>
<xsl:with-param name="number" select="$total - $i"/>
</xsl:call-template>
</xsl:for-each>
<br />
</xsl:for-each-group>
</xsl:template>
<xsl:template name="row">
<xsl:param name="name"/>
<xsl:param name="number"/>
<xsl:value-of select="concat($number, '. ')"/>
<xsl:value-of select="concat($name, ' ')"/><br />
</xsl:template>
</xsl:stylesheet>
Это вывод, он довольно близок к выводу, который я хочу.
2010
4. john
3. smith
2007
4. jack
2000
4. sam
То, что я хочу, это просто нумерация всех имен (в порядке убывания от общего количества имен до 1), например,
2010
4. john
3. smith
2007
2. jack
2000
1. sam
Было бы просто, если бы мы могли переназначить переменную на новое значение, но я думаю, что это невозможно, поэтому мне нужно найти другое решение. Может кто-нибудь помочь мне узнать, как решить эту проблему.
спасибо