Questo post è un po' la continuazione del precedente, in quando ho sempre i due file xml e xslt. In questo caso l'xslt utilizza l'svg per creare un grafico a barre che visualizza i punti in classifica delle squadre della serie A 2008/09.
Ho il seguente codice SVG:
Per la definizione del gradiente ho usato le istruzioni presenti nella guida SVG di html.it.Codice PHP:<svg:svg width="1400" height="700" align="center">
<xsl:for-each select="SERIE_A_08-09/SQUADRA">
<xsl:sort select="POSIZIONE" data-type="number"/>
<xsl:variable name="colori" select="COD_COLORI"/>
<xsl:variable name="colore1" select="substring-before($colori,",")" />
<xsl:variable name="colore2" select="substring-after($colori,",")" />
<xsl:variable name="nome" select="NOME"/>
<xsl:variable name="postext" select="((position()-1)*70)"/>
<xsl:variable name="contatore" select="((position()-1)*70)+5"/>
<xsl:variable name="punti" select="PUNTI_CLASSIFICA"/>
<xsl:variable name="altezza" select="(600*$punti) div 84"/>
<svg:linearGradient id="gradiente" gradientUnits="userSpaceOnUse" x1="{$contatore}" y1="{600-$altezza}" x2="{$contatore}" y2="600">
<svg:stop offset="0" stop-color="{$colore1}"/>
<svg:stop offset="1" stop-color="{$colore2}"/>
</svg:linearGradient>
<svg:rect x="{$contatore}" y="{600-$altezza}" width="40" height="{$altezza}" fill="url(#gradiente)" stroke="black" stroke-width="2"/>
</xsl:for-each>
</svg:svg>
Il mio problema è che il gradiente non viene aggiornato con i colori e i valori dei vari elementi del for-each, ma mi visualizza tutte le colonne con lo stesso gradiente, cioè quello del primo elemento letto dal for-each.
Il problema è di sicuro nella definizione del gradiente, infatti se sostituisco il fill="url(#gradiente)" con fill="{$colore1)" ottengo barre di colori diversi... come faccio a togliere il "sola lettura" ai parametri del gradiente una volta definito la prima volta? e, inoltre, perchè il gradiente va in "sola lettura" dopo la prima definizione?
grazie in anticipo a chiunque sarà in grado di aiutarmi.
Max

Rispondi quotando