Thomas J.S.: Auf- und zuklappen von Elementen bei unbekannter Elementanzahl

Beitrag lesen

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
Himbeer

nachher:
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