Templates XSLT增量递归模板
请帮我解决这个问题。 有没有一种方法可以在不使用position()、number()或xpath表达式的情况下生成增量编号列表 下面是我想使用xslt 1.0处理的示例xml文档: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> <
<?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 <= $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" />