Twój przykład XML nie potrzebuje go (patrz @ odpowiedź Empo za) ale na początku najważniejszą rzeczą do nauczenia się jest szablon "przekształcenia tożsamości". Zasadniczo kopiuje wszystkie dane wejściowe XML tak jak jest i jest niezmodyfikowana. Wszelkie zmiany, które należy wprowadzić, można zwykle wykonać, zastępując przekształcenie tożsamości innymi szablonami.
Oto przykładowy arkusz stylów, który daje wyjście szukasz:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<!--IDENTITY TRANSFORM-->
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/ABC">
<CDE F="">
<ABC G="">
<xsl:copy-of select="@*"/>
</ABC>
</CDE>
</xsl:template>
</xsl:stylesheet>
UWAGA: „tożsamość przekształcić” nie przyzwyczaić podczas przetwarzania XML wejściowego ponieważ szablon match="/ABC"
obsługuje jedną element, który masz. Jeśli jednak dodałeś coś do swojego XML-a, to zostałoby to niezmienione w wyniku.
Na przykład, zmodyfikowane wejście XML:
<ABC X="" Y="" Z="">
<FOO BAR=""/>
</ABC>
transfomed z następującym arkusza (jak wyżej, tylko dodano <xsl:apply-templates/>
do /ABC
matrycy):
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<!--IDENTITY TRANSFORM-->
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/ABC">
<CDE F="">
<ABC G="">
<xsl:copy-of select="@*"/>
<xsl:apply-templates/>
</ABC>
</CDE>
</xsl:template>
</xsl:stylesheet>
wytwarza następujących wyjście:
<CDE F="">
<ABC G="" X="" Y="" Z="">
<FOO BAR=""/>
</ABC>
</CDE>
+1 za czyste pytanie. –
+1 za to, co powiedział empo –