我正在使用 XPath for 循环等效项 -
<xsl:for-each select="for $i in 1 to $length return $i">...
我真的需要一个计数变量,我该如何实现呢?
谢谢,
灰。
首先请注意
for $i in 1 to $length return $i
只是一种啰嗦的写法
1 to $length
在 for-each 中,您可以将当前整数值作为“.”访问。或作为position()
.
里面
<xsl:for-each select="for $i in 1 to $length return $i">...</xsl:for-each>
上下文项是整数值,因此您只需要访问.
或current()
.
以下不需要额外的命名空间。该解决方案包含一个名为的模板,该模板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>