встречная итерация в XSLT - PullRequest
2 голосов
/ 01 февраля 2011

Я хотел бы изменить существующий код в XSLT, чтобы иметь возможность повторять и отображать счетчик.

Вот код, где «Ранг» должен быть счетчиком, я не могу реализовать это в другом месте, потому что сортировка здесь сделана!

Я не знаю, понятен ли мой вопрос, но вот фрагмент кода:

<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 ]

4 голосов
/ 01 февраля 2011

Вот полный пример, как это сделать :

<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 голос
/ 01 февраля 2011

Вы можете использовать функцию 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>
...