2012-03-30 32 views
1

我正在使用xslt 1.0 我需要打印nos,從1開始給定長度。如何迭代在xslt中打印給定長度的nos?

例如如果給定的長度是5,那麼我需要迭代一個循環,可以迭代5次並打印nos,如1,2,3,4,5這樣。 我嘗試使用for循環,但是,我無法遞減要在每個迭代器中打印的值。

請對上述情況有任何建議? 感謝inadvanvce

回答

1

這種轉變

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<xsl:template match="/"> 
    <xsl:call-template name="printNumbers"> 
     <xsl:with-param name="pUpTo" select="5"/> 
    </xsl:call-template> 
</xsl:template> 

<xsl:template name="printNumbers"> 
     <xsl:param name="pUpTo"/> 
     <xsl:param name="pCurrent" select="1"/> 

     <xsl:if test="$pUpTo >= $pCurrent"> 
     <xsl:value-of select="$pCurrent"/> 
     <xsl:text> </xsl:text> 

     <xsl:call-template name="printNumbers"> 
      <xsl:with-param name="pUpTo" select="$pUpTo"/> 
      <xsl:with-param name="pCurrent" select="$pCurrent+1"/> 
     </xsl:call-template> 
     </xsl:if> 
</xsl:template> 
</xsl:stylesheet> 

當任何XML文檔(未使用)應用時產生想要的,正確的結果

1 2 3 4 5 

對於成功產生巨大數量的項目,使用DVC風格的遞歸,如我在這個問題的答案:

Print numbers from one to one million

我推薦使用,以避免書面明確的遞歸花費太多時間FXSL庫的功能,也避免這樣做的任何潛在錯誤。