我应该何时使用<copy-of>
代替<apply-templates>
?
他们的独特角色是什么?大多数时候用<apply-templates>
替换<copy-of>
会产生奇怪的输出。那是为什么?
答案 0 :(得分:13)
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>
答案 1 :(得分:7)
copy-of
只会在提供的节点集
中返回XML转储apply-templates
另一方面,将应用适用于传递它的节点集的任何模板。