当xsl:foreach真的有用吗?

时间:2009-03-27 11:05:07

标签: xslt

当xsl:foreach非常有用时,有人会举个例子吗?

我刚刚制作了一个项目并得出结论,我可以用适当的<xsl:apply-templates />替换它。 <xsl:if><xsl:when/>有时会缩短代码,我无法在功能样式中用<apply-templates/>有效替换它。

<xsl:foreach>是否被视为有害?

嗯,谢谢大家,我真的无法选择最好的答案。我认为收集不同的案件会更好。

对不起有人低估答案 - 这不是我:)。

4 个答案:

答案 0 :(得分:5)

这通常是代码风格的问题。如果你正在做一个相当短的for-each,并且需要从父块访问变量,那么可以更清楚地为每个那里做一个for,而不是应用模板并作为参数传入更多它需要的东西

肯定有时候使用模板更清晰,而且使用for-each的时间肯定更清晰。它们都是有用的工具。

答案 1 :(得分:4)

如果确切知道<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文档中的查找表。

答案 2 :(得分:2)

我也认为这是一种风格问题。

我见过XSLT样式表几乎不使用任何<xsl:apply-templates>的项目。他们总是使用<xsl:call-template>代替。这不是一个功能,而是一个程序编码。这种方法不可避免地会导致您过度使用<xsl:for-each>

就个人而言,我总是更喜欢你在问题中提出的风格。但这是一个团队管理,技能和一致性的问题,让你更喜欢这种或那种风​​格。

答案 3 :(得分:1)

我经常使用for-each因为我必须构建变量,这些变量是较大的xml文件的子集。

<xsl:variable name="foo">
  <xsl:for-each select="document('bar.xml')/item">
    <xsl:if test="baz = bax">
      <xsl:copy-of select="."/>
    </xsl:if>
  </xsl:for-each>
</xsl:variable>

这可以用模板吗?

可能是我是那些无法看到原生XSL方式的程序员之一......