Hallo Frank,
Dann sollte es xslt 2.0 sein, oder?
Ja, sofern ein Prozessor wie Saxon (ab HE) zum Einsatz kommt.
Die Transformation läuft mit xsl:for-each-group aber auf Fehler.
Hier ein Testbeispiel (habe einen Namespace für ibxx eingetragen, welcher auch im XML des Ausgangspostings vorkommen muss). Dieses gruppiert nach der vorname-/nachnameOderFirma-Kombination und sofern diese eindeutig ist, wird die erste sortierte Gruppierung weiterverwendet:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:fn="http://www.w3.org/2005/xpath-functions"
xmlns:ibxx="http://example.com/ibxx"
exclude-result-prefixes="#all">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="XX_Nachweis">
<test_output>
<xsl:for-each-group select="ibxx:Person_zusatzangaben/ibxx:Interessent/ibxx:XX_Person"
group-by="fn:concat(ibxx:vorname, ' ', ibxx:nachnameOderFirma)">
<xsl:sort select="fn:concat(ibxx:vorname, ' ', ibxx:nachnameOderFirma)" order="ascending" data-type="text"/>
<xsl:for-each select="current-group()">
<xsl:if test="position() = 1">
<out>
<vorname><xsl:value-of select="ibxx:vorname"/></vorname>
<nachnameOderFirma><xsl:value-of select="ibxx:nachnameOderFirma"/></nachnameOderFirma>
<strasse><xsl:value-of select="ibxx:strasse"/></strasse>
<!-- usw. -->
</out>
</xsl:if>
</xsl:for-each>
</xsl:for-each-group>
</test_output>
</xsl:template>
</xsl:stylesheet>
Ergebnis:
<?xml version="1.0" encoding="UTF-8"?>
<test_output>
<out>
<vorname>Carmen</vorname>
<nachnameOderFirma>Mustermann</nachnameOderFirma>
<strasse>Musterplatz</strasse>
</out>
<out>
<vorname>Dieter</vorname>
<nachnameOderFirma>Mustermann</nachnameOderFirma>
<strasse>Musterplatz</strasse>
</out>
<out>
<vorname>Jutta</vorname>
<nachnameOderFirma>Mustermann</nachnameOderFirma>
<strasse>Musterplatz</strasse>
</out>
</test_output>
Den Gruppenschlüssel kann man sich übrigens mit current-grouping-key() ausgeben lassen oder diesen für weitere Abfragen verwenden.
Grüße,
Thomas