0
请帮我解决增量问题。 有没有办法在不使用position(),number()或xpath表达式的情况下创建增量编号列表?XSLT增量递归模板
这里是我想用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>
这里是实际输出,问题是它会在每个<line-item>
节点中重复每个<value>
,这不是我想要得到的结果。
<?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>
我通过互联网上的主题阅读,似乎我卡住了。 请帮帮我。 P.S.对不起,很长的职位。
哇,非常感谢,帮助! –