2012-02-28 11 views
0

xmlファイルまたはxslファイルのいずれかに問題があるようです。ここには何が起こったのだろうか XMlファイルには、表示されたときに投票が含まれています。これは、結果をランク#とパーセントで並べ替えて並べ替え、結果を表示することになっています。それは、投票の割合が途方もないことを除いて、すべて正しく見える。 私は何が間違っていますか?xml sortとcountが正しく機能しない

XMLコード

<?xml-stylesheet type="text/xsl" href="os.xsl" ?> 

<poll> 
<ballot id="b1"> 

    <os>Windows Server 2003 Standard</os> 
    <os>Suse Linux</os> 
</ballot> 
<ballot id="b2"> 
    <os>Windows Server 2003 Standard</os> 
     <os>Ubuntu Linux</os> 
     </ballot> 
<ballot id="b3"> 

</ballot> 
<ballot id="b4"> 
    <os>Windows Server 2003 Standard</os> 
    <os>Debin Linux</os> 
</ballot> 
<ballot id="b5"> 
    <os>Suse Linux</os> 
    <os>Windows Server 2003 Standard</os> 
    <os>Debin Linux</os> 
</ballot> 
<ballot id="b6"> 
    <os>Suse Linux</os> 
    <os>Ubuntu Linux</os> 
    <os>Windows Server 2008 Standard</os> 
    <os>Debin Linux</os> 
</ballot> 
<ballot id="b7"> 
    <os>Debin Linux</os> 
    <os>Ubuntu Linux</os> 
     <os>Debin Linux</os> 
</ballot> 
<ballot id="b8"> 
    <os>Windows Server 2008 Standard</os> 
    <os>Debin Linux</os> 
    <os>Ubuntu Linux</os> 
    <os>Suse Linux</os> 
    <os>Debin Linux</os> 
    </ballot> 
</poll> 

XSLコードは

<?xml version="1.0" encoding="UTF-8" ?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<!-- 

--> 


     <xsl:key name="oss" match="os" use="."/> 

    <xsl:variable name="single-os" select="//os[generate-id(.) = generate-id(key('oss', .))]/."/> 
     <xsl:template match="/"> 
    <html> 
    <head> 
     <title>Top Customer Server OS</title> 
     <link href="os.css" rel="stylesheet" type="text/css" /> 
    </head> 
    <body> 
     <h2>Top Customer Server OS </h2> 
     <table border="0" width="550"> 
     <tr><td colspan="4">Number of the Ballots: <xsl:value-of select="count(poll/ballot)"/></td></tr> 

     <tr> 
     <th>Rank</th> 
     <th>os</th> 
     <th>Votes</th> 
     <th>%</th> 
     </tr> 


    <xsl:for-each select="$single-os"> 

    <xsl:sort select="count(key('oss', current()))" order="descending" data-type="number" /> 
     <xsl:variable select="count(key('oss', current()))" name="votes" /> 
     <tr> 
     <td><xsl:value-of select="position()" />.</td> 
     <td> 
     <xsl:value-of select="." /> 
     </td> 
     <td align="right"><xsl:value-of select="$votes" /></td> 
     <td align="right"><xsl:value-of select="format-number($votes div count(//ballot), '#.00%')" /></td> 
     </tr> 
     <xsl:if test="position() mod 10 = 0"> 
     <tr> 
     <td colspan="4"><hr /></td> 
     </tr> 
    </xsl:if> 
    </xsl:for-each> 

    </table> 
    </body> 
    </html> 
     </xsl:template> 
     </xsl:stylesheet> 

答えて

1

あなたは割合をやっているとき、あなたがダイビングしている投票の総数によってOSのための投票数を下回る始まり要素:

<xsl:value-of select="format-number($votes div count(//ballot), '#.00%')" /> 

すべてOS用の投票の合計数でOSため要素

<xsl:value-of select="format-number($votes div count(//os), '#.00%')"/> 

の投票数を割ることは何あなたがやるべきことこれはあなたが必要結果を与える必要があります。

+0

これは私が必要としていることです – Jon

関連する問題