xsl:for-each有什么坏处?

时间:2009-04-10 10:36:20

标签: xslt

我一次又一次地听到你应该如何避免使用XSLT。这是你应该被放逐的内在势在必行的编程恶魔。

它有什么坏处?

这种最佳做法是否取决于XML的 size (即100 vs 10,000个节点)?

5 个答案:

答案 0 :(得分:6)

没有人指出的<xsl:apply-templates><xsl:-for-each>之间的本质区别

  1. <xsl:apply-templates>实际上不仅仅是<xsl:for-each>的更好,更优雅的等价物:
  2. xsl:apply-templatesxsl:for-each更加丰富和深刻,甚至 只是因为我们不知道将在节点上应用什么代码 选择 - 在一般情况下,此代码将有所不同 节点列表的不同节点

    此外, 将应用的代码 可以在编写xsl:apply模板之后写出来 那些不了解原作者的人


    _2。另一方面,如果确切知道<xsl:for-each>的处理方式,使用<xsl:for-each>绝不会有害。

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

    <xsl:for-each>的一个必不可少的用途是更改当前文档 - 这通常需要in order to be able to use the key() function on a document, different from the current source XML document,例如,有效地访问驻留在其自己的xml文档中的查找表。

答案 1 :(得分:5)

模板倾向于更好地分割代码。此外,对于每个循环都会遇到这样一个事实:人们常常认为他们的操作与主循环编程语言中的循环方式相同。

答案 2 :(得分:2)

快速回答:XSLT在很大程度上是功能性的,而命令式循环功能不是很强大。

一般来说,充分利用XSLT的基本方法是尽可能使用模式匹配(xsl:apply-template而不是循环,ifs和call-template 1 )。< / p>

最后,它完全是关于样式的,并且在XSLT的短片中几乎没有什么区别,但是更具功能性将有助于解决更长/更复杂的问题。

1 除了在创建返回值而不是修改输出的函数时。

答案 3 :(得分:2)

使用for-each来调用不受欢迎的模板,而不是for-each本身的广泛使用。即使Muenchian method of grouping依赖于xsl:key带有xsl:for-each循环的构造。

编写优秀的XSLT的想法是,XML的结构应该决定匹配哪些模板然后应用。因此,尽可能使用apply-templates选择节点,而不是使用for-each应用选择。

答案 4 :(得分:1)

通过使用apply-templates,或许使用mode,可以更轻松地包含对该位置可能感兴趣的更多种元素的适当转换。

例如,如果您有包含库内容的XML,并且您继续使用for-each到处选择书籍,那么您开始记录DVD,CD,Ginger Nut饼干等,您将不得不检查所有的每个部分不仅包括书籍。如果您使用过apply-templates,则可以简单地为新元素创建新匹配。