我需要为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问题的受害者.
现在,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文章中找到有关此主题的更多信息.
编辑作为对您编辑的问题的回复.如果您的问题真的归结为输出文本内容两次:
<?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>
当然,对于动态的迭代次数,这是不可行的.