<copy-of>和<apply-templates>有什么区别?</apply-templates> </copy-of>

时间:2009-12-07 10:31:51

标签: xslt

我应该何时使用<copy-of>代替<apply-templates>

他们的独特角色是什么?大多数时候用<apply-templates>替换<copy-of>会产生奇怪的输出。那是为什么?

2 个答案:

答案 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
另一方面,

将应用适用于传递它的节点集的任何模板。