当xsl:foreach非常有用时,有人会举个例子吗?
我刚刚制作了一个项目并得出结论,我可以用适当的<xsl:apply-templates />
替换它。 <xsl:if>
和<xsl:when/>
有时会缩短代码,我无法在功能样式中用<apply-templates/>
有效替换它。
<xsl:foreach>
是否被视为有害?
嗯,谢谢大家,我真的无法选择最好的答案。我认为收集不同的案件会更好。
对不起有人低估答案 - 这不是我:)。
答案 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方式的程序员之一......