代码之家  ›  专栏  ›  技术社区  ›  Eddie Groves

xsl:for-each有什么坏处?

  •  6
  • Eddie Groves  · 技术社区  · 15 年前

    我一次又一次地听到关于如何避免为每个人使用XSLT的问题。你内心的命令式编程恶魔应该被驱逐。

    有什么不好的?

    这个最佳实践是否重要取决于 大小 XML(即100对10000个节点)?

    5 回复  |  直到 15 年前
        1
  •  6
  •   Dimitre Novatchev    15 年前

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

    1. <xsl:apply-templates> 真的比一个更美好、更优雅的 <xsl:for-each> :

    xsl:apply-templates xsl:for-each 甚至 仅仅因为 我们不知道将在的节点上应用什么代码 选择——在一般情况下,此代码对于 节点列表的不同节点 .

    也, 将应用的代码 可以在编写xsl:apply模板之后通过 不认识原作者的人 .


    2。在另一边, 使用 <xsl:每个> 如果一个人知道 <xsl:每个> 被加工 .

    问题是,许多新加入的XSLT用户在命令式编程方面都有经验 <xsl:每个> 作为它们最喜欢的pl中“循环”的替代,并认为它允许它们执行不可能的操作——比如递增计数器或对已经定义的 <xsl:variable> .

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

        2
  •  5
  •   dommer    15 年前

    模板倾向于更好地拆分代码。此外,对于每个循环,人们通常会想到,它们的操作方式与主要编程语言中循环的工作方式相同。

        3
  •  2
  •   Cerebrus    15 年前

    它的用途是 for-each 调用不鼓励使用的模板,而不是广泛使用 对于每一个 ,本身。即使是 Muenchian method of grouping 依赖于 xsl:key 构造与 xsl:for-each 循环。

    编写好的XSLT的想法是,XML的结构应该指定匹配的模板,然后应用。因此,只要可能,使用 apply-templates 选择节点,而不是使用 对于每一个 .

        4
  •  2
  •   Richard    15 年前

    快速回答:在本质上,XSLT基本上是功能性的,命令式循环的功能性不是很强。

    通常,从XSLT中获得最佳效果的基本方法是尽可能多地使用模式匹配。( xsl:apply-template 而不是循环、IFS和调用模板 )

    归根结底,这一切都是关于样式的,并且在短的XSLT片段中几乎没有什么区别,但是更具功能性将有助于解决较长/复杂的问题。

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

        5
  •  1
  •   Stephen Denne    15 年前

    通过使用 apply-templates 可能是一个 mode ,使包含在该位置感兴趣的更多类型元素的适当转换变得更容易。

    例如,如果您有一个包含库内容的XML,并且您不断地在各地使用它来选择书籍,那么您就开始保存DVD、CD、生姜坚果饼干等的记录,您将不得不检查每个部分的所有内容,以使其不仅仅包括书籍。如果您已经使用了Apply模板,那么您可以简单地为新元素创建新的匹配项。