请帮我解决增量问题。有没有办法在不使用 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>
我想要得到的是一个增量变量,它随着每个<line>
节点的增加而增加。<pos>
这是带有增量的所需输出:
<?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>
这是我迄今为止设法提出的样式表转换:
<?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>
这是实际的输出,问题是它<value>
在每个<line-item>
节点中都重复,这不是我想要得到的结果。
<?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>
我通读了整个互联网上的主题,似乎我被困住了。请帮我。PS对不起,很长的帖子。