Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it L'avatar di ilgiovo
    Registrato dal
    Aug 2001
    Messaggi
    518

    raggruppamento nidificato dei record con xsl

    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

  2. #2
    Utente di HTML.it L'avatar di ilgiovo
    Registrato dal
    Aug 2001
    Messaggi
    518
    Grazie lo stesso, ho trovato la soluzione in giro su Internet!

    se vi interessa:
    http://www.biglist.com/lists/xsl-lis.../msg01025.html

    ciao
    ilGiovo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.