XSLT中的计数器迭代

时间:2011-02-01 18:22:36

标签: xslt sorting iterator counter

我想修改XSLT中的一些现有代码,以便能够迭代并显示计数器。

这是代码,其中“Rank”必须是计数器,我无法在其他地方实现,因为排序是在这里完成的!

我不知道我的问题是否清楚,但这里有一些代码:

<xsl:for-each select="Player">
      <xsl:sort select="Points" order="descending" data-type="number"/>
      <xsl:sort select="G" order="descending" data-type="number"/>
      <xsl:sort select="A" order="descending" data-type="number"/>
      <xsl:sort select="GP" order="ascending" data-type="number"/>
      <tr bgcolor="#E2EFED" border="0">
        <td align="center"><xsl:value-of select="Rank"/></td>
        <td align="center"><xsl:value-of select="Name"/></td>
        <td align="center"><xsl:value-of select="Team"/></td>   
      </tr>
</xsl:for-each>

2 个答案:

答案 0 :(得分:4)

以下是如何执行此操作的完整示例

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="text"/>

 <xsl:template match="/*">
  <xsl:for-each select="*">
   <xsl:value-of select="concat('&#xA;', position(), '. ', name())"/>
  </xsl:for-each>
 </xsl:template>
</xsl:stylesheet>

将此转换应用于以下XML文档时:

<t>
 <a/>
 <b/>
 <c/>
 <d/>
 <e/>
</t>

生成了想要的结果

1. a
2. b
3. c
4. d
5. e

将代码修改为:

    <xsl:for-each select="Player">
        <xsl:sort select="Points" order="descending" data-type="number"/>
        <xsl:sort select="G" order="descending" data-type="number"/>
        <xsl:sort select="A" order="descending" data-type="number"/>
        <xsl:sort select="GP" order="ascending" data-type="number"/>
        <tr bgcolor="#E2EFED" border="0">
            <td align="center">
                <xsl:value-of select="position()"/>
            </td>
            <td align="center">
                <xsl:value-of select="Name"/>
            </td>
            <td align="center">
                <xsl:value-of select="Team"/>
            </td>
        </tr>
    </xsl:for-each>

答案 1 :(得分:1)

您可以使用XPath position()函数。

http://www.w3.org/TR/xpath/#function-position

换句话说就是改变:

<td align="center"><xsl:value-of select="Rank"/></td>

<td align="center"><xsl:value-of select="position()"/></td>