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