2012-02-02 73 views
2

为了学习XSLT,我使用了以下XML文件和XSLT样式表。我想制作一个排在3*goals + 2*assists之后的球员名单。在XSLT 1.0中排序的问题

<?xml-stylesheet type="text/xsl" href="player_ranking.xsl"?> 
<soccer xmlns="http://mysoccer.it"> 
    <players> 
    <player> 
     <name>Pelé</name> 
     <goals>21</goals> 
     <assists>9</assists> 
    </player> 
    <player> 
     <name>Beckenbauer</name> 
     <goals>7</goals> 
     <assists>18</assists> 
     </player> 
     <player> 
     <name>Spiderman</name> 
     <goals>27</goals> 
     <assists>38</assists> 
     </player> 
     <player> 
     <name>Hagi</name> 
     <goals>13</goals> 
     <assists>14</assists> 
     </player> 
     <player> 
     <name>Laudrup</name> 
     <goals>11</goals> 
     <assists>25</assists> 
     </player> 
     <player> 
     <name>Gullit</name> 
     <goals>17</goals> 
     <assists>15</assists> 
     </player> 
    </players> 
    </soccer> 

样式表

<xsl:stylesheet version="2.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:soc="http://mysoccer.it" 
    xmlns="http://www.w3.org/1999/xhtml"> 

    <xsl:template match="soc:soccer"> 
    <html> 
     <head> 
    <title>Famous players ranked</title> 
     </head> 
     <body> 
     <h1>Overall ranking</h1> 
     <xsl:apply-templates match="soc:players"/> 
     </body> 
    </html> 
    </xsl:template> 

    <xsl:template match="soc:players"> 
    <xsl:apply-templates select="soc:player"> 
     <xsl:sort select="soc:goals * 3 + 2 * soc:assists" order="descending"/> 
    </xsl:apply-templates> 
    </xsl:template> 

    <xsl:template match="soc:player"> 
    <xsl:value-of select="soc:name"/> 
    with score 
    <xsl:value-of select="soc:goals * 3 + 2 * soc:assists"/> 
    <br/> 
    </xsl:template> 

</xsl:stylesheet> 

在浏览器中(与两个Opera和Firefox试过)它产生

Overall ranking 

Laudrup with score 83 
Pelé with score 81 
Gullit with score 81 
Hagi with score 67 
Beckenbauer with score 57 
Spiderman with score 157 

蜘蛛侠应该出现在列表的顶部。有人能指出我的错误吗?

我在样式表中使用version="2.0"如使用version="1.0"给我Error loading stylesheet: Parsing an XSLT stylesheet failed.

回答

3

看起来像它做一个字母排序,所以1 < 5等

尝试更改排序行:

<xsl:sort select="soc:goals * 3 + 2 * soc:assists" data-type="number" order="descending"/> 
+1

D'oh!谢谢。 – 2012-02-02 12:21:35