4.1.2.4  Elemente kopieren

Transformation-Patterns Kopieren Ein wiederverwendbarer Schritt, der mit @copy-target-id markierte Elemente nach eine Stelle kopiert, die mit @copy-id markiert wurde, könnte z.B. so aussehen:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    exclude-result-prefixes="xs"
    version="2.0">
    
    <xsl:key name="targets" match="*[@copy-target-id]" use="@copy-target-id"/>
    
    <!-- copy elements from src to target -->
    
    <xsl:template match="*[@copy-id]">
        <xsl:copy>
            <xsl:apply-templates select="node()|@*"/>
            <xsl:apply-templates select="key('targets',@copy-id)" mode="copied"/>
        </xsl:copy>
    </xsl:template>

    <!-- remove original position and attributes -->
	
    <xsl:template match="*[@copy-target-id]"/>
    <xsl:template match="@copy-target-id|@copy-id" mode="copied"/>
   
    <xsl:template match="node()|@*" mode="#all">
        <xsl:copy>
            <xsl:apply-templates select="node()|@*" mode="#current"/>
        </xsl:copy>
    </xsl:template>
 
</xsl:stylesheet>
Plain Text

Mit so einer Vorgehensweise kann man sukkzessive und mittels einzelner Kopierschritte die XML Instanz umbauen und die Zwischenergebnisse verfolgen. So eine explorative Herangehensweise hat enorme Vorteile, wenn man sich über den Algorithmus noch nicht ganz im Klaren ist.