Hallo,
Es soll nach Postleitzahl gruppiert werden (hab ich schon hinbekommen) und es sollen mehrfache einträge nur einmal angezeigt werden.
Also z.B. ist im unteren Beispiel der Eintrag Bauer, Koenigstr. 1,... doppelt und soll somit einmal nur gezeigt werden.
Im Prinzip willst Du damit doppelt gruppieren: Einmal nach der PLZ und einmal nach der Gesamtadresse. Wenn die Gesamtadresse identisch ist, dann gibst Du sie nur einmal aus (d.h. zeigst nur einen Eintrag für die gesamte Gruppe der gleichen Adresse an).
Du brauchst dafür einen zusätzlichen Schlüssel:
<xsl:key name="addr" match="address" use="." />
Und bei Deiner *inneren* for-Schleife musst Du etwas tricksen. Sie sieht bisher so aus:
<xsl:for-each select="key('order', zip)">
Du willst also jetzt alle Knoten, die key() liefert, nochmal gruppieren, das kannst Du machen, indem Du einfach einen weiteren Qualifier anhängst, z.B. so:
<xsl:for-each select="key('order', zip)[generate-id(.) = generate-id(key('addr', .)[1])]">
Und dann funktioniert's bereits.
Anmerkung: Du kannst statt use="." und key('addr', .) auch sowas wie use="concat(zip, '|', city, '|', street)" und dann entsprechend key('addr', concat(zip, '|', city, '|', street)) verwenden, wenn Du den Schlüssel lieber etwas mehr unter Kontrolle haben willst und Dich nicht auf die automatische String-Konvertierung (und damit auf die richtige Reihenfolge der Knoten im Quelldokument) verlassen willst.
Viele Grüße,
Christian