4

我正在使用 XPath for 循环等效项 -

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

我真的需要一个计数变量,我该如何实现呢?

谢谢,

灰。

4

3 回答 3

10

首先请注意

for $i in 1 to $length return $i

只是一种啰嗦的写法

1 to $length

在 for-each 中,您可以将当前整数值作为“.”访问。或作为position().

于 2013-08-07T11:59:17.817 回答
6

里面

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

上下文项是整数值,因此您只需要访问.current().

于 2013-08-07T09:42:14.560 回答
5

以下不需要额外的命名空间。该解决方案包含一个名为的模板,该模板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>
于 2013-08-07T09:29:29.217 回答