2013-08-07 57 views

回答

4

以下不需要額外的名稱空間。該解決方案包含一個名爲iterate模板是從自身內部調用,並相應地更新$length$i

XSLT

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="/"> 
     <root> 
      <xsl:call-template name="iterate"/> 
     </root> 
    </xsl:template> 
    <xsl:template name="iterate"> 
     <xsl:param name="length" select="5"/> 
     <xsl:param name="i" select="1"/> 
     <pos><xsl:value-of select="$i"/></pos> 
     <xsl:if test="$length > 1"> 
      <xsl:call-template name="iterate"> 
       <xsl:with-param name="length" select="$length - 1"/> 
       <xsl:with-param name="i" select="$i + 1"/> 
      </xsl:call-template> 
     </xsl:if> 
    </xsl:template> 
</xsl:stylesheet> 

輸出

<?xml version="1.0" encoding="UTF-8"?> 
<root> 
    <pos>1</pos> 
    <pos>2</pos> 
    <pos>3</pos> 
    <pos>4</pos> 
    <pos>5</pos> 
</root> 
+0

不知道爲什麼這個令人難以置信的詳細解決方案已被接受,當其他答案表明一個更簡潔的解決方案。 –

+0

我不得不同意@MichaelKay我最初誤解了這個問題,並且在'給我1美元到1美元的長度回報$ i'的印象中沒有工作,只是一個概念,Michael(和Martin)按需要工作。 –

6

裏面的

<xsl:for-each select="for $i in 1 to $length return $i">...</xsl:for-each> 

上下文項是整數值,因此您只需訪問.current()

6

首先要注意

for $i in 1 to $length return $i 

是寫

1 to $length 

內的for-each,您可以訪問當前的整數值只是一個冗長的路 「」或作爲position()