xsl:copy-of
- точная копия соответствующего входного XML-элемента. Обработка xslt не выполняется, и выходные данные этого элемента будут точно такими же, как и входные.
xsl:apply-templates
заставляет механизм xslt обрабатывать шаблоны, соответствующие выбранным элементам. xsl:apply-templates
- это то, что дает xslt возможность переопределения, поскольку шаблоны, которые вы создаете с сопоставлением элементов, могут иметь разные приоритеты, и шаблон с наивысшим приоритетом будет выполнен.
Введите:
<a>
<b>asdf</b>
<b title="asdf">asdf</b>
</a>
Xslt 1:
<xsl:stylesheet ... >
<xsl:template match="a">
<xsl:copy-of select="b" />
</xsl:template>
</xsl:stylesheet>
Вывод XML 1:
<b>asdf</b>
<b title="asdf">asdf</b>
Xslt 2:
<xsl:stylesheet ... >
<xsl:template match="a">
<xsl:apply-templates select="b" />
</xsl:template>
<xsl:template match="b" priority="0">
<b><xsl:value-of select="." /></b>
<c><xsl:value-of select="." /></c>
</xsl:template>
<xsl:template match="b[@title='asdf']" priority="1">
<b title="{@title}"><xsl:value-of select="@title" /></b>
</xsl:template>
</xsl:stylesheet>
Вывод XML 2:
<b>asdf</b>
<c>asdf</c>
<b title="asdf">asdf</b>