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

Beitrag lesen

Hallo,

vielen Dank für Deine schnelle Antwort.

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

bekomme ich dann den gesamten Inhalt von <kontakte> + das Element, welches ich anlege.

OK: <xsl:copy-of select="child::node()"/> sollte dem abhelfen.

Wenn ich jedoch im ersten Teil:

[...]

Ich müsste sagen könnte: Wenn du beim Kopieren auf <kontakte> triffst, führe das unterhalb von <xsl:template match="kontakte"> aus, also füge neuen kontakt hinzu, kopiere alles unterhalb und mache dann mit kopieren des rests weiter. Nur wie mache ich das dem XSL klar'??? *ratlosgugg*

Das kannst du nicht so "einfach" machen, weil copy und copy-of eben fürs Kopieren gedacht sind.
Du kannst ein Template für alle Elemente erstellen, deren Inhalt du nciht verändern willst:
<xsl:template match="foo | bar | bla | blubb">
  <xsl:copy-of select="."/>

wenn hierbei in der Verschachtelung Elemente vorkommen deren Inhalt du geändert haben willst, dann eben so:
<xsl:template match="foo | bar | bla | blubb">
  xsl:copy
    <xsl:copy-of select="@*"/>
    xsl:apply-templates/
   </xsl:copy>

Für die Elemente deren Inhalt du verändern willst muss du eigene Templates anlegen (wie für <kontakte>) und dort die Änderungen und das Kopieren machen.
Dann diese Templates eben mit xsl:apply-templates/ aufrufen.

Grüße
Thomas