Kerstin: xsl:copy und/oder xsl:copy-of

Beitrag lesen

Hallihallo,

ich steh mächtig auf dem Schlauch. Habe ein XML-Dokument, dessen Struktur kopiert werden soll. Das geht wohl auf mehrere Arten, z.B.:

<xsl:template match="@*|node()">
 xsl:copy
  <xsl:apply-templates select="@*|node()">
 </xsl:copy>
</xsl:template>

oder so:

<xsl:template match"/root">
 xsl:copy
  <xsl:copy-of select="/root/*"/>
 </xsl:copy>
</xsl:template>

Allderings möchte ich an bestimmte Stellen ein neues Element einfügen. Wenn ich letzteres verwende, kann ich unterhalb von <root> sofort ein neues Element anschließen, so dass das Element <daten> mit der id="3" eingefügt wird:

<root><daten id="3"></daten>
 <daten id="1"></daten>
 <daten id="2"></daten>
 <kontakte>
  <kontakt id="1"></kontakt>
 </kontakte>
</root>

Allerdings möchte ich auch unterhalb von <kontakte> oder in tiefer gelegenen Elementen neue Elemente einfügen und genau bei diesem Problem hakts grad arg.

Ich bin im Moment soweit:

<xsl:template match="/root">
 xsl:copy
  <xsl:element name="daten">
   <xsl:attribute name="id">3</xsl:attribute>
  </xsl:element>
  <xsl:copy-of select="/root/*"/>
  xsl:apply-templates/
 </xsl:copy>
</xsl:template>

<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.

Vielleicht fällt mir ja morgen eine Lösung ein. Vielleicht könntet ihr mir auch einen Tipp geben. Ich weiß im Moment nicht weiter. Das muss doch irgendwie gehen.

Gruß,
Kerstin