Thomas J.S.: xsl:copy und/oder xsl:copy-of

Beitrag lesen

Hallo,

Ich bin im Moment soweit:

<xsl:template match="kontakte">
xsl:copy
  <xsl:element name="kontakt">
   <xsl:attribute name="id">2</xsl:attribute>
  </xsl:element>
  <xsl:copy-of select="kontakte/*"/>
  xsl:apply-templates/
</xsl:copy>
</xsl:template>

Damit wird mir zwar
<kontakte>
<kontakt id="2"></kontakt>
</kontakte>
angelegt.
Die anderen Kontakte fehlen aber und drumrumm wird nur der Inhalt der Elemente kopiert ohne die Elemente.

Nein, der Inhalt der Elemente wird nciht kopiert, es greift für sie das apply-templates bzw. durch dieses das build-in Template für Elemente, was den Text der Elemente in dem Ergebnisbaum schreibt.
Das "warum" liegt am  <xsl:copy-of select="kontakte/*"/>.
Du bist im Template bereits im <kontakte> darunter gibt es aber kein weiteres <kontakte>-Elementen, es gibts also auch nichts zu kopieren.
Die Lösung wäre: <xsl:copy-of select="*"/> oder <xsl:copy-of select="./*"/> was dasselbe ist.

Grüße
Thomas