何时使用for-each以及何时在xslt中使用apply-templates?

时间:2011-05-27 23:06:41

标签: xslt

我听说大多数情况下,在编写XSLT时,通常可以(并且更好)使用apply-templates而不是for-each。这是真的?如果是这样,使用apply-templates有什么好处?

1 个答案:

答案 0 :(得分:5)

如果确切知道如何处理<xsl:for-each> ,则使用<xsl:for-each>绝不会有害。

麻烦的是许多XSLT的新手在命令式编程方面都有<xsl:for-each>作为他们最喜欢的PL中“循环”的替代品,并认为它允许他们执行不可能的事情 - 比如说递增计数器或已定义的<xsl:variable>的任何其他修改。

XSLT 1.0中<xsl:for-each>的一个必不可少的用途是更改当前文档 - 为了能够在文档上使用key()函数,这通常是必需的,与当前源不同例如,XML文档可以有效地访问驻留在自己的xml文档中的查找表。

另一方面,使用<xsl:template><xsl:apply-templates>更加强大和优雅。

以下是两种方法之间最重要的差异

  1. xsl:apply-templatesxsl:for-each更加丰富和深刻,甚至 只是因为我们不知道将在节点上应用什么代码 选择 - 在一般情况下,此代码将有所不同 节点列表的不同节点。

  2. 将应用的代码 可以在xsl:apply template写完之后写出来 那些不了解原作者的人。

  3. 如果XSLT没有<xsl:apply-templates>指令,则无法在XSLT中实现FXSL library高阶函数(HOF)

    摘要:模板和<xsl:apply-templates>指令是XSLT实现和处理多态的方式。

    参考:查看整个帖子: http://www.stylusstudio.com/xsllist/200411/post60540.html