2011-05-04 29 views
20

我期待在XSL/FO中爲每個循環取反。如何做一個XSL:for-each按相反的順序

例如在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不

,這怎麼可能?

回答

28

使用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> 
+0

究竟是什麼我正在尋找,特別感謝,因爲它是正確的,使用0.23的FOP(定製和無法更新)爲阿拉伯文件留下fo:flow – 2011-05-04 11:33:49

+0

正確的答案。雖然在這種情況下,不需要'後裔或自我:: * /記錄'。它可能只是「記錄」。 – 2011-05-04 16:11:24

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

是,亞歷山大是正確的 - 忘記了數據類型,但:

<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的數字)