PDA

View Full Version : [XSLT] Trasformazione con for-each, sort e variable


vv1984
26-11-2008, 13: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!

Hardware Upgrade Forum Database Error
Database Error Database error
The Hardware Upgrade Forum database has encountered a problem.

Please try the following:
  • Load the page again by clicking the Refresh button in your web browser.
  • Open the www.hwupgrade.it home page, then try to open another page.
  • Click the Back button to try another link.
The www.hwupgrade.it forum technical staff have been notified of the error, though you may contact them if the problem persists.
 
We apologise for any inconvenience.