【发布时间】:2018-11-25 17:11:34
【问题描述】:
我想使用 for-each-group 按角色的加速度 (accel) 对角色进行分组并对组进行排序。这样格式如下:
<results>
<result accel =" lowest-value">
<name>Character 1</name>
<name>Character 2</name>
...
</result>
...
<result accel="highest-value">
<name>Character 7</name>
<name>Character 8</name>
...
</result>
</results>
我已经计算出一个平均值,然后在名称中添加了一个属性来对它们进行分组,但我一直坚持如何在其上使用 for-each-group。我是使用 XSLT 的新手,但以下是我的尝试:
<xsl:template match ="/">
<xsl:variable name="path" select="mariokart/characters/character"/>
<xsl:variable name="accel" select="mariokart/characters/character/accel"/>
<xsl:variable name="name" select="mariokart/characters/character/name"/>
<xsl:variable name="averageaccel" select="sum($accel) div count($path)"/>
<xsl:for-each select="$name">
<xsl:copy>
<xsl:attribute name="accelgroup">
<xsl:choose>
<xsl:when test="(../accel>=$averageaccel)">
<xsl:text>highest-value</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>lowest-value</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:attribute>
</xsl:copy>
</xsl:for-each>
<results>
<xsl:for-each-group select="$name" group-by="@accelgroup">
<result accel="{current-grouping-key()}">
<xsl:for-each select="current-group()">
<name><xsl:copy-of select="."/></name>
</xsl:for-each>
</result>
</xsl:for-each-group>
</results>
</xsl:template>
xml 示例:
<mariokart>
<characters>
<character>
<name>Baby Peach</name>
<speed>
<land>2.25</land>
<anti-g>2</anti-g>
<water>2.5</water>
<air>2.75</air>
</speed>
<accel>4</accel>
<weight>2</weight>
<handling>
<land>5</land>
<anti-g>5</anti-g>
<water>4.5</water>
<air>5</air>
</handling>
<traction>4.25</traction>
<M-turbo>4</M-turbo>
</character>
<character>
<name>Baby Rosalina</name>
<speed>
<land>2.25</land>
<anti-g>2</anti-g>
<water>2.5</water>
<air>2.75</air>
</speed>
<accel>4.25</accel>
<weight>2</weight>
<handling>
<land>4.75</land>
<anti-g>4.75</anti-g>
<water>4.25</water>
<air>4.75</air>
</handling>
<traction>3.75</traction>
<M-turbo>4</M-turbo>
</character>
<character>
<name>Baby Mario</name>
<speed>
<land>2.5</land>
<anti-g>2.25</anti-g>
<water>2.75</water>
<air>3</air>
</speed>
<accel>4.25</accel>
<weight>2.25</weight>
<handling>
<land>4.5</land>
<anti-g>4.5</anti-g>
<water>4</water>
<air>4.5</air>
</handling>
<traction>4</traction>
<M-turbo>3.75</M-turbo>
</character>
</characters>
</mariokart>
【问题讨论】: