XSLT是一種功能性的語言和除其他事項外,這意味着變量在XSLT是不可變的和onc e他們已經確定他們的價值不能改變。
下面是同樣的效果可以在XSLT來實現:
<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="/">
<posts>
<xsl:for-each select="data/posts/entry">
<xsl:variable name="i" select="position()" />
<xsl:copy>
<xsl:value-of select="concat('$i = ', $i)"/>
</xsl:copy>
</xsl:for-each>
</posts>
</xsl:template>
</xsl:stylesheet>
當這種轉變是在下面的XML文檔應用:
<data>
<posts>
<entry/>
<entry/>
<entry/>
<entry/>
<entry/>
</posts>
</data>
結果是 :
<posts>
<entry>$i = 1</entry>
<entry>$i = 2</entry>
<entry>$i = 3</entry>
<entry>$i = 4</entry>
<entry>$i = 5</entry>
</posts>
感謝Dimitre,我沒有意識到變量可以在for-each循環中重用。我的問題實際上比我發佈的例子複雜得多,我找到了一個使用遞歸的解決方案,但是我會用你的建議看看更優雅的解決方案 – DonutReply 2010-07-29 12:14:37
@Oliver雖然遞歸是通用的,但是有一些方法可以用遞歸替換迭代。這樣可以優化時間和空間 - xslt應用程序。 – 2010-07-29 12:40:19