Ciao a tutti.
Lavoro con WinXP Pro, IIS5, IE6 e ho installato il Parser Microsoft versione 4.
Ho una struttura XML il cui schema è il seguente:
<data>
<row gruppo_id="1" gruppo_desc="Gruppo1" analisi_id="1" analisi_desc="Analisi1" subanalisi_id="1" subanalisi_desc="Subanalisi1" />
<row gruppo_id="1" gruppo_desc="Gruppo1" analisi_id="1" analisi_desc="Analisi1" subanalisi_id="2" subanalisi_desc="Subanalisi2" />
<row gruppo_id="1" gruppo_desc="Gruppo1" analisi_id="2" analisi_desc="Analisi2" subanalisi_id="3" subanalisi_desc="Subanalisi3" />
....
</data>
Devo fare l'output di questo tramite un foglio xsl e l'output deve risultare così:
Gruppo1
Analisi1
Subanalisi1
Subanalisi2
Analisi2
Subanalisi3
....
insomma un classico group-by nidificato per gruppo e per analisi.
Sfogliando la guida del parser ho trovato come si fa il group-by a un livello, ma non riesco a nidificarlo! ecco il foglio xsl:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:key name="gruppi_key" match="row" use="@gruppi_analisi_id"/>
<xsl:key name="analisi_key" match="row" use="@analisi_id"/>
<xsl:template match="/">
<table class="TABLE1" width="100%">
<xsl:apply-templates select="data" mode="grp_gruppi"/>
</table>
</xsl:template>
<xsl:template match="data" mode="grp_gruppi">
<xsl:for-each select="row[generate-id() = generate-id(key('gruppi_key', @gruppi_analisi_id)[1])]">
<tr><td nowrap="nowrap" colspan="4"><xsl:value-of select="@gruppi_analisi_desc"/></td></tr>
<xsl:for-each select="key('gruppi_key', @gruppi_analisi_id)">
<tr><td><xsl:text> </xsl:text></td><td nowrap="nowrap" colspan="3"><xsl:value-of select="@analisi_desc"/></td></tr>
<xsl:for-each select="key('analisi_key', @analisi_id)">
<tr><td><xsl:text> </xsl:text></td><td><xsl:text> </xsl:text></td><td nowrap="nowrap">
<xsl:choose>
<xsl:when test="@subanalisi_stato = 'A'">
<xsl:attribute name="style">background-color: yellow; width: 1%;</xsl:attribute>
<a href="#">
<xsl:attribute name="onclick">btnRimuovi_onclick('<xsl:value-of select="@subanalisi_id"/>');</xsl:attribute>In Attesa
</a>
</xsl:when>
<xsl:when test="@subanalisi_stato = 'L'">
<xsl:attribute name="style">background-color: orange; width: 1%;</xsl:attribute>In Lavorazione
</xsl:when>
<xsl:when test="@subanalisi_stato = 'E'">
<xsl:attribute name="style">background-color: red; width: 1%;</xsl:attribute>Eseguito
</xsl:when>
<xsltherwise>
<xsl:attribute name="style">background-color: fuchsia; width: 1%;</xsl:attribute>?????
</xsltherwise>
</xsl:choose></td>
<td nowrap="nowrap"><xsl:value-of select="@subanalisi_desc"/></td></tr>
</xsl:for-each>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
in effetti funziona ma in fase di output mi duplica le analisi!
Qualcuno sa consigliarmi o correggermi?
Grazie
ilGiovo