vv1984
26-11-2008, 12:59
Ciao a tutti, ho il seguente frammento xml:
<girone>
<classifica>
<squadra nome="Ghana" punti="3"/>
<squadra nome="Italia" punti="4"/>
<squadra nome="Repubblica Ceca" punti="3"/>
<squadra nome="U.S.A." punti="1"/>
</classifica>
<risultati>
<partita id="g11">
<squadra nome="Italia" goal="2"/>
<squadra nome="Ghana" goal="0"/>
</partita>
<partita id="g12">
<squadra nome="U.S.A." goal="0"/>
<squadra nome="Repubblica Ceca" goal="3"/>
</partita>
<partita id="g21">
<squadra nome="Ghana" goal="2"/>
<squadra nome="Repubblica Ceca" goal="0"/>
</partita>
<partita id="g22">
<squadra nome="Italia" goal="1"/>
<squadra nome="U.S.A." goal="1"/>
</partita>
</risultati>
</girone>
Dovrei fare una tabella con la classifica generale, una cosa del tipo:
<table border="1">
<tr>
<td><img src="logo.jpg" height="85" width="150"></td>
<td> Punti </td>
<td> Goal Fatti </td>
<td> Goal Subiti </td>
</tr>
<tr>
<td>Italia</td>
<td>4</td>
<td>3</td>
</tr>
<tr>
<td>Ghana</td>
<td>3</td>
<td>2</td>
</tr>
<tr>
<td>Repubblica Ceca</td>
<td>3</td>
<td>3</td>
</tr>
<tr>
<td>U.S.A.</td>
<td>1</td>
<td>1</td>
</tr>
</table>
Sono riuscito a impostare la tabella e ad ordinare
le squadre in base a //classifica/squadra/@punti
inserendo anche il campo della tabella "goal fatti" e "goal subiti".
Ma mi sono reso conto che l'ordine corretto dell'esercizio è (come sarebbe logico aspettarsi) quello in base alla differenza tra goal fatti e subiti. Questo lo si verifica, nel caso della squadra "Italia" con questa espressione:
sum(//partita/squadra[@nome='Italia']/@goal) -
sum(//partita[squadra/@nome='Italia']/squadra[@nome!='Italia']/@goal)
Il mio problema è rendere parametrica questa espressione e ordinare in base ad essa. La maggiore difficoltà è data dal fatto che XSLT non ammette una variabile tra un elemento for e un elemento sort.. e quindi sono bloccato in questa situazione:
<xsl:for-each select="//classifica/squadra">
<xsl:sort order="descending" select="@punti" />
<xsl:variable name="nome_tmp" select="@nome" />
Qualche suggerimento?
grazie mille!
<girone>
<classifica>
<squadra nome="Ghana" punti="3"/>
<squadra nome="Italia" punti="4"/>
<squadra nome="Repubblica Ceca" punti="3"/>
<squadra nome="U.S.A." punti="1"/>
</classifica>
<risultati>
<partita id="g11">
<squadra nome="Italia" goal="2"/>
<squadra nome="Ghana" goal="0"/>
</partita>
<partita id="g12">
<squadra nome="U.S.A." goal="0"/>
<squadra nome="Repubblica Ceca" goal="3"/>
</partita>
<partita id="g21">
<squadra nome="Ghana" goal="2"/>
<squadra nome="Repubblica Ceca" goal="0"/>
</partita>
<partita id="g22">
<squadra nome="Italia" goal="1"/>
<squadra nome="U.S.A." goal="1"/>
</partita>
</risultati>
</girone>
Dovrei fare una tabella con la classifica generale, una cosa del tipo:
<table border="1">
<tr>
<td><img src="logo.jpg" height="85" width="150"></td>
<td> Punti </td>
<td> Goal Fatti </td>
<td> Goal Subiti </td>
</tr>
<tr>
<td>Italia</td>
<td>4</td>
<td>3</td>
</tr>
<tr>
<td>Ghana</td>
<td>3</td>
<td>2</td>
</tr>
<tr>
<td>Repubblica Ceca</td>
<td>3</td>
<td>3</td>
</tr>
<tr>
<td>U.S.A.</td>
<td>1</td>
<td>1</td>
</tr>
</table>
Sono riuscito a impostare la tabella e ad ordinare
le squadre in base a //classifica/squadra/@punti
inserendo anche il campo della tabella "goal fatti" e "goal subiti".
Ma mi sono reso conto che l'ordine corretto dell'esercizio è (come sarebbe logico aspettarsi) quello in base alla differenza tra goal fatti e subiti. Questo lo si verifica, nel caso della squadra "Italia" con questa espressione:
sum(//partita/squadra[@nome='Italia']/@goal) -
sum(//partita[squadra/@nome='Italia']/squadra[@nome!='Italia']/@goal)
Il mio problema è rendere parametrica questa espressione e ordinare in base ad essa. La maggiore difficoltà è data dal fatto che XSLT non ammette una variabile tra un elemento for e un elemento sort.. e quindi sono bloccato in questa situazione:
<xsl:for-each select="//classifica/squadra">
<xsl:sort order="descending" select="@punti" />
<xsl:variable name="nome_tmp" select="@nome" />
Qualche suggerimento?
grazie mille!