Christian Seiler: Unique mit mehreren Attributen

Beitrag lesen

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