以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 XSL/XSLT/XSL-FO/CSS 』  (http://bbs.xml.org.cn/list.asp?boardid=8)
----  关于XSLT中的循环问题。  (http://bbs.xml.org.cn/dispbbs.asp?boardid=8&rootid=&id=12106)


--  作者:perfectck
--  发布时间:11/16/2004 2:51:00 PM

--  关于XSLT中的循环问题。
我在XSLT中能够实现类似

for(int i=0;i<10;i++)
{
}

的循环吗?


--  作者:doubleG
--  发布时间:11/16/2004 3:06:00 PM

--  
只能用函数递归去实现,别的没有办法,因为<xsl:variable...一旦被赋值就不能被更改。
--  作者:perfectck
--  发布时间:11/16/2004 3:26:00 PM

--  
给各例子好吗?
--  作者:孤独
--  发布时间:11/16/2004 8:36:00 PM

--  
递归,或者用微软的msxml:script
--  作者:doubleG
--  发布时间:11/17/2004 9:15:00 AM

--  
1.xml:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="1.xsl"?>
<root/>

1.xsl:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:template match="/">
 <xsl:call-template name="addFunction">
  <xsl:with-param name="addString" >1</xsl:with-param>
  <xsl:with-param name="currentNum">1</xsl:with-param>
  <xsl:with-param name="theResult" >1</xsl:with-param>
 </xsl:call-template>
</xsl:template>

<xsl:template name="addFunction">
 <xsl:param name="addString"/>
 <xsl:param name="currentNum"/>
 <xsl:param name="theResult"/>
 <xsl:value-of select="concat($addString,'+',$currentNum)"/> =
 <xsl:value-of select="$theResult + $currentNum"/>
 <br/>
 <xsl:if test="$currentNum &lt;= 10 ">
  <xsl:call-template name="addFunction">
   <xsl:with-param name="addString" select="concat($addString,'+',$currentNum)"/>
   <xsl:with-param name="currentNum" select="$currentNum + 1"/>
   <xsl:with-param name="theResult" select="$theResult + $currentNum"/>
  </xsl:call-template>
 </xsl:if>
</xsl:template>
</xsl:stylesheet>


--  作者:Forlan
--  发布时间:11/26/2004 1:53:00 PM

--  
目前只能递归的方式进行限定循环,以下是一个例子:

<xsl:template name="LoadCondition">
 <xsl:param name="TotalNum"/>
 <xsl:param name="Pos"/>  
 <xsl:value-of name="$Pos"/>
 <xsl:text>  </xsl:text>
 <!-- 递归方式输出下一个 -->
 <xsl:if test="$Pos &lt; $ConditionNum">
  <xsl:call-template name="LoadCondition">
   <xsl:with-param name="ConditionNum" select="$TotalNum"/>
   <xsl:with-param name="Pos" select="$Pos + 1"/>
  </xsl:call-template>
 </xsl:if>
</xsl:template>


--  作者:Forlan
--  发布时间:11/26/2004 1:56:00 PM

--  
打错了,更正如下:
<xsl:template name="LoadCondition">
<xsl:param name="TotalNum"/>
<xsl:param name="Pos"/>  
<xsl:value-of name="$Pos"/>
<xsl:text>  </xsl:text>
<!-- 递归方式输出下一个 -->
<xsl:if test="$Pos < $ConditionNum">
  <xsl:call-template name="LoadCondition">
   <xsl:with-param name="TotalNum" select="$TotalNum"/>
   <xsl:with-param name="Pos" select="$Pos + 1"/>
  </xsl:call-template>
</xsl:if>
</xsl:template>

W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
46.875ms