Bon, je suis pas un pro en XSL (comparé à Erwy par exemple), mais je dirais que ton XSL est plutôt pas mal déjà.
Par contre il faut changer l'élément sur lequel tu fais le tri : c'est pas "top500:country" mais "." :
1 2
| <xsl:for-each select="top500:site/top500:country">
<xsl:sort select="."/> |
Du moins sous Firefox ça fonctionne avec le ".".
Sinon, j'utiliserais la fonction distinct-values pour ne récupérer que les pays différents (pas testée car ne fonctionne pas sous FF) :
<xsl:for-each select="distinct-values(top500:site/top500:country)">
A partir de là tu as déjà tes 2 premières colonnes.
Pour la 3ième, c'est une simple opération :
1 2 3 4 5 6
| <!-- variable à déclarer en dehors (avant) de la boucle -->
<xsl:variable name="total" select="count(//top500:site/top500:country)" />
...
<!-- Dans la boucle -->
<xsl:variable name="count" select="count(//top500:site[top500:country=current()])" />
<xsl:value-of select="$count * 100 div $total"/> |
Après pour ce qui est de l'optimisation du code, ça doit pas être optimal
Mais au moins ça marche chez moi (sauf le distinct-values vu que je teste sous FF) et ça s'affiche instantanément.
Partager