ThomasM: Doppelte Einträge ausfiltern

Beitrag lesen

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