Templates XSLT增量递归模板

Templates XSLT增量递归模板,templates,xslt,recursion,increment,Templates,Xslt,Recursion,Increment,请帮我解决这个问题。 有没有一种方法可以在不使用position()、number()或xpath表达式的情况下生成增量编号列表 下面是我想使用xslt 1.0处理的示例xml文档: <?xml version="1.0" encoding="UTF-8"?> <root> <text>a</text> <text>b</text> <text>c</text> <

请帮我解决这个问题。 有没有一种方法可以在不使用position()、number()或xpath表达式的情况下生成增量编号列表

下面是我想使用xslt 1.0处理的示例xml文档:

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <text>a</text>
    <text>b</text>
    <text>c</text>
    <line>
        <test>5</test>
        <test>6</test>
    </line>
    <line>
        <test>7</test>
        <test>8</test>
    </line>
    <line>
        <test>9</test>
        <test>10</test>
    </line>
    <line>
        <test>11</test>
        <test>12</test>
    </line>
</root>

A.
B
C
5.
6.
7.
8.
9
10
11
12
我想要得到的是一个增量变量,它随着每个
节点的增加而增加。 以下是增量为
的所需输出:

<?xml version='1.0' ?>
<line>
  <line-item>
    <pos>1</pos>
    <value>5</value>
    <value>6</value>
  </line-item>
  <line-item>
    <pos>2</pos>
    <value>7</value>
    <value>8</value>
  </line-item>
  <line-item>
    <pos>3</pos>
    <value>9</value>
    <value>10</value>
  </line-item>
  <line-item>
    <pos>4</pos>
    <value>11</value>
    <value>12</value>
  </line-item>
</line>

1.
5.
6.
2.
7.
8.
3.
9
10
4.
11
12
以下是我迄今为止成功实现的样式表转换:

<?xml version='1.0'?>
<xsl:stylesheet version="1.0" id="1" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" />

<xsl:template match="/">
    <xsl:variable name="total_lines" select="count(root/line)" />

    <line>
        <xsl:call-template name="iter">
            <xsl:with-param name="end" select="$total_lines" />
        </xsl:call-template>
    </line>
</xsl:template>

<xsl:template name="iter">
    <xsl:param name="counter" select="1" />
    <xsl:param name="end" />

    <xsl:if test="$counter &lt;= $end">
        <line-item>
            <pos>
                <xsl:value-of select="$counter" />
            </pos>

            <xsl:apply-templates select="root/line/test" />
        </line-item>

        <xsl:call-template name="iter">
            <xsl:with-param name="counter" select="$counter + 1" />
            <xsl:with-param name="end" select="$end" />
        </xsl:call-template> 
    </xsl:if>
</xsl:template>

<xsl:template match="/root/line/test" > 
    <value>
        <xsl:value-of select="." />
    </value>
</xsl:template>

</xsl:stylesheet>

这是实际的输出,问题是它在每个
节点中重复每个
,这不是我想要得到的结果

<?xml version='1.0' ?>
<line>
  <line-item>
    <pos>1</pos>
    <value>5</value>
    <value>6</value>
    <value>7</value>
    <value>8</value>
    <value>9</value>
    <value>10</value>
    <value>11</value>
    <value>12</value>
  </line-item>
  <line-item>
    <pos>2</pos>
    <value>5</value>
    <value>6</value>
    <value>7</value>
    <value>8</value>
    <value>9</value>
    <value>10</value>
    <value>11</value>
    <value>12</value>
  </line-item>
  <line-item>
    <pos>3</pos>
    <value>5</value>
    <value>6</value>
    <value>7</value>
    <value>8</value>
    <value>9</value>
    <value>10</value>
    <value>11</value>
    <value>12</value>
  </line-item>
  <line-item>
    <pos>4</pos>
    <value>5</value>
    <value>6</value>
    <value>7</value>
    <value>8</value>
    <value>9</value>
    <value>10</value>
    <value>11</value>
    <value>12</value>
  </line-item>
</line>

1.
5.
6.
7.
8.
9
10
11
12
2.
5.
6.
7.
8.
9
10
11
12
3.
5.
6.
7.
8.
9
10
11
12
4.
5.
6.
7.
8.
9
10
11
12
我在网上通读了所有的话题,似乎我被卡住了。 请帮帮我。
顺便说一句,很抱歉发了这么长的帖子。

在我看来,这是一个奇怪的解决方案,但更改一行就可以了:

更改为:

<xsl:apply-templates select="root/line/test" />

致:


<xsl:apply-templates select="root/line[$counter]/test" />