Hallo,
ich habe ein kleines Problem mit einer XSLT, und zwar geht es um folgendes:
»»[...] Mein Wunsch ist es, dass eine Auflistung aller Eissortennamen erscheint, und wenn man auf den Namen klickt (im folgenden Beispiel Erdbeer), dann soll darunter eine Auflistung aller Farben erscheinen, etwa so:
vorher:
Erdbeer
Himbeernachher:
Erdbeer
magenta
rot
rosa
Himbeer
Du hast ein Gruppierungsproblem.
Hier zwei (Bespiel*) Lösungen:
========== XSLT 1.0 ========
<xsl:key name="sorte" match="Eisdiele/Eissorte" use="@name"/>
...
<xsl:template match="Eisdiele">
<ul>
<xsl:for-each select="Eissorte[generate-id() = generate-id(key('sorte', @name)[1])]">
<xsl:sort select="@name"/>
<li>
<xsl:value-of select="@name"/>
<ul>
<xsl:for-each select="key('sorte', @name)">
<xsl:sort select="@farbe"/>
<li>
<xsl:value-of select="@farbe"/>
</li>
</xsl:for-each>
</ul>
</li>
</xsl:for-each>
</ul>
</xsl:template>
========== XSLT 2.0 ========
<xsl:template match="Eisdiele">
<ul>
<xsl:for-each-group select="Eissorte" group-by="@name">
<xsl:sort select="@name"/>
<li>
<xsl:value-of select="@name"/>
<ul>
<xsl:for-each select="current-group()">
<li>
<xsl:value-of select="@farbe"/>
</li>
</xsl:for-each>
</ul>
</li>
</xsl:for-each-group>
</ul>
</xsl:template
Das Aufklappen und Zuklappen kannst du dann mit JavaScrip/CSS realisieren (falls du überhaupt eine HTML-ausgabe generierst)
Deshalb auch der *, denn ob du jetzt in HTML Listen (bietet sich semantisch am besten an) oder es anderes realisierst, ist dir überlassen.
Grüße
Thomas