2011-12-05 52 views
3

我已經搜索並試圖找到這個答案,但沒有一個解決方案似乎工作。 我有以下XML架構:XML排序依據屬性

<xml> 
    <race> 
    <particpant time="3.25" name="joe blogs"> 
    <particpant time="1.15" name="john Doe"> 
    <particpant time="2.0" name="A random"> 
    </race> 
</xml> 

然後我試圖在XSLT以下轉變:

<ul> 
    <xsl:for-each select="participant"> 
    <xsl:sort order="ascending" select="@time"/> 
    <li> <xsl:value-of select="@name"/> (<xsl:value-of select="@time"/>)</li> 
    </xsl:for-each> 
</ul> 

環路工程翻出每個參與者,但排序順序有一個奇怪的效果,切換位置但不一定按照正確的順序排列它們。

任何人都可以指向正確的方向。

BTW上面的代碼是我的代碼的剝離版本和虛擬數據,因爲實際文件更大更復雜。

在此先感謝

約翰

+0

我知道沒有任何正式的規則,但大多數人傾向於使用實際數據的子元素,只有元數據(其中應該有非常少)應當存儲爲屬性(雖然我不知道是否改變這樣的結構會幫助或阻礙你目前的問題) – ChrisW

+0

Chris-謝謝,我同意你的說法,不幸的是我從外部來源獲取數據,因此無法控制它。不過謝謝。 – user505988

回答

3

我認爲這可能是因爲他們彷彿是串它是排序值。你嘗試過以下嗎?

<ul> 
    <xsl:for-each select="participant"> 
    <xsl:sort data-type="number" order="ascending" select="@time"/> 
    <li> <xsl:value-of select="@name"/> (<xsl:value-of select="@time"/>)</li> 
    </xsl:for-each> 
</ul> 
+0

謝謝你。這是令人興奮的。當我一直在閱讀時,我沒有看到那種「數據類型」。 – user505988