Transformacja tożsamościowa
Kiedy używać transformacji tożsamościowej? Dosyć często zdarza się, że wynik transformacji ma wyglądać tak jak dokument podany na wejście z niewielkimi modyfikacjami - np.
1) należy wszędzie usunąć zadany atrybut (w przykładzie usuwany jest atrybut @email):
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="@email" />
</xsl:stylesheet>
2) dla określonych węzłów należy dodać jakąś informację (w przykładzie węzłom link dodawany jest atrybut @id) :
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="link">
<xsl:copy>
<xsl:copy-of select="@*" />
<xsl:attribute name="id">
<xsl:value-of select="generate-id()"/>
</xsl:attribute>
<xsl:apply-templates select="node()" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
W obu przypadkach jeśli procesor Xslt napotka węzeł/atrybut pasujący do nowo dodanego szablonu (odpowiednio: atrybut "@email" lub węzeł "link") zastosuje ten szablon do przetworzenia napotkanego węzła lub atrubutu. Dzieje się tak dlatego, że wyrażenie w atrybucie @match nowo dodanych szablonów jest bardziej specyficzne niż wyrażenie w domyślnym szablonie transformacji tożsamościowej (match="@* | node()") w wyniku czego priorytet nowo dodanych szablonów jest wyższy.
Transformacja tożsamościowa może być używana nie tylko do przetwarzania wejściowego dokuementu Xml ale także do zmiennych, co tylko zwiększa potencjalne możliwości jej zastosowań.
