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

Abe*_*ler 7 xslt

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

Dim*_*hev 5

<xsl:for-each>如果确切地知道如何<xsl:for-each>处理,使用绝不是有害的.

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

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

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

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

  1. xsl:apply-templates也更加丰富,比更深xsl:for-each,甚至仅仅是因为我们不知道什么代码将选择的节点上应用-在一般情况下,该代码将是节点列表的不同节点不同.

  2. 将要应用的代码可以在编写xsl:apply templates 之后以及不知道原始作者的人员的方式编写.

FXSL库的实现在XSLT高阶函数(HOF)是不可能的,如果XSLT没有足够的<xsl:apply-templates>指令.

简介:模板和<xsl:apply-templates>指令是XSLT如何实现和处理多态的.

参考:请参阅此完整主题:http://www.stylusstudio.com/xsllist/200411/post60540.html