Подтвердить что ты не робот

Как сделать XSL: для каждого в обратном порядке

Я ищу обратное в XSL/FO для каждого цикла.

например, xml

<data>
  <record id="1"/>
  <record id="2"/>
  <record id="3"/>
  <record id="4"/>
  <record id="5"/>
  <record id="6"/>
</data>

с xsl

<xsl:for-each select="descendant-or-self::*/record">
   <xsl:value-of select="@id"/>
</xsl:for-each>

Я ищу выход 654321, а не 123456

как это возможно?

4b9b3361

Ответ 1

Используйте xsl: sort не для упорядочивания @id, а для упорядочивания position():

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/data">
    <xsl:for-each select="descendant-or-self::*/record">
        <xsl:sort select="position()" data-type="number" order="descending"/>
        <xsl:value-of select="@id"/>
    </xsl:for-each>
</xsl:template>
</xsl:stylesheet>

Ответ 2

Да, Александр прав - забыл тип данных:

<xsl:for-each select="descendant-or-self::*/record">
   <xsl:sort select="@id" order="descending" data-type="number" />
   <xsl:value-of select="@id"/>
</xsl:for-each>

(без этого вы столкнетесь с проблемами сортировки с числами более 9)

Ответ 3

xsl: sort является вашим другом;

<xsl:for-each select="descendant-or-self::*/record">
   <xsl:sort select="@id" order="descending" />
   <xsl:value-of select="@id"/>
</xsl:for-each>