Hallo Nube2021,
Demnach müsste die for-each-Schleife immer nur das letzte Produkt einer bestimmten Kategorie zurückgeben. Wie gesagt, bei kleinen Dateien klappts, bei großen leider nicht.
Probiere es so:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="ISO-8859-1" indent="yes" version="1.0"
doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"/>
<xsl:key name="cat_key" match="product" use="cat"/>
<xsl:template match="productlist">
<html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de">
<head><title>Test</title></head><body>
<ul>
<xsl:for-each select="product[generate-id() = generate-id(key('cat_key',cat)[1])]">
<xsl:sort select="cat" data-type="text" order="ascending"/>
<li><xsl:value-of select="cat"/></li>
</xsl:for-each>
</ul>
</body></html>
</xsl:template>
</xsl:stylesheet>
Sofern XSLT 2.0 zur Verfügung steht, wäre xsl:for-each-group eine Alternative.
Ergebnis:
...
<ul>
<li>Radios</li>
<li>Waschmaschinen</li>
</ul>
...
Grüße,
Thomas