作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要做一个经典的 for i=0 到 N 循环,在 xSTL 1.0 中如何实现?
谢谢。
<xsl:for-each select="¿¿¿$i=0..5???">
<fo:block>
<xsl:value-of select="$i"/>
</fo:block>
</xsl:for-each>
举个例子,我有
<foo>
<bar>Hey!</bar>
</foo>
并且想要一个输出
Hey!
Hey!
最佳答案
XSLT 是一种函数式编程语言,因此它与您已知的任何过程语言都非常不同。
虽然 for
循环在 XSLT 中是可能的,但它们没有利用 XSLT(和一般的函数式编程)的固有优势。
for
循环经常被误用于解决最好用函数式方法(即匹配模板)解决的问题。换句话说,循环在 XSLT 中并不是真正的“经典”。
因此,您可能不得不折返,找出您面临的问题,而不是讨论您的解决方案。然后,XSLT 社区可能会提出一个本质上更实用的解决方案。您可能已成为 XY problem 的受害者.
现在,XSLT 本质上擅长的事情之一就是递归。通常,在过程语言中用循环解决的问题在 XSLT 中用递归模板解决。
<xsl:template name="recursive-template">
<xsl:param name="var" select="5"/>
<xsl:choose>
<xsl:when test="$var > 0">
<xsl:value-of select="$var"/>
<xsl:call-template name="recursive-template">
<xsl:with-param name="var" select="$var - 1"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise/>
</xsl:choose>
</xsl:template>
总而言之,我建议您查看“经典”递归而不是“经典”for
循环。您可以在 IBM 文章 here 中找到关于此主题的更多信息。 .
EDIT 作为对您已编辑问题的回应。如果您的问题真的归结为两次输出文本内容:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/foo">
<xsl:apply-templates select="bar"/>
<xsl:apply-templates select="bar"/>
</xsl:template>
</xsl:stylesheet>
这对于动态迭代次数当然是不可行的。
关于XSLT How to do a classic for x to y loop?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21779239/
我是一名优秀的程序员,十分优秀!