Hallo,
Stylesheet:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" />
<xsl:key name="s" match="xWC" use="concat(@ty,':',@st)"/>
<xsl:template match="/data">
<data>
<xsl:for-each select="xWC[generate-id()=generate-id(key('s',concat(@ty,':',@st))[1])]">
<xsl:sort select="."/>
<xsl:copy-of select="." />
</xsl:for-each>
</data>
</xsl:template>
</xsl:stylesheet>
Eingabedatei:
<?xml version="1.0"?>
<data>
<xWC ty="t1" st="win">a1</xWC>
<xWC ty="o1" st="win">b1</xWC>
<xWC ty="o1" st="win">c1</xWC>
<xWC ty="n1" st="test">d1</xWC>
<xWC ty="n1" st="win">e1</xWC>
</data>
Wenn Du in der Schleife wie Du nur die Attribute selektierst (<xsl:value-of select="@ty"/>
), dann wird nur der Textinhalt der Attribute an die Stelle kopiert. Du willst jedoch den gesamten Knoten kopieren, d.h. ein <xsl:copy-of select="."/>
ist hier angebracht. Alternativ kannst Du den Ziel-xWC-Knoten natürlich auch manuell konstruieren und nur bestimmte Attribute kopieren.
Viele Grüße,
Christian