有没有人知道是否可以循环模板并根据迭代次数提取节点值.例如,我有以下 XML结构: nodes node label1Label a/label1 value1Value a/value1 label2Label b/label2 value2Value b/value2 label3Label c/label3 value3Value
<nodes>
<node>
<label1>Label a</label1>
<value1>Value a</value1>
<label2>Label b</label2>
<value2>Value b</value2>
<label3>Label c</label3>
<value3>Value c</value3>
etc...
</node>
</nodes>
总共有20个标签/值对数据.我想通过XSLT在表中输出这些.通过循环模板20次(除非有更好的方法).
我下面的代码有效,但在输出值时不会接受动态数字(例如
<xsl:value-of select="$node/label$index"/>
)
这是迄今为止的代码:
<xsl:param name="currentPage"/>
<xsl:variable name="numberOfPairs" select="20" />
<xsl:template match="/">
<table>
<xsl:call-template name="outputData">
<xsl:with-param name="node" select="$currentPage" />
</xsl:call-template>
</table>
</xsl:template>
<xsl:template name="outputData">
<xsl:param name="node" select="." />
<xsl:param name="index" select="1" />
<tr>
<td><xsl:value-of select="$node/label1"/></td>
<td><xsl:value-of select="$node/value1"/></td>
</tr>
<xsl:if test="$index <= $numberOfPairs">
<xsl:call-template name="outputData">
<xsl:with-param name="node" select="$node" />
<xsl:with-param name="index" select="$index + 1" />
</xsl:call-template>
</xsl:if>
</xsl:template>
有谁能建议解决这个问题?
<xsl:output method="xml" indent="yes" />
<xsl:template match="/">
<table>
<xsl:apply-templates select="nodes/node/*[starts-with(name(), 'label')]"/>
</table>
</xsl:template>
<xsl:template match="*">
<xsl:variable name="index" select="substring(name(), 6)"/>
<tr>
<td>
<xsl:value-of select="."/>
</td>
<td>
<xsl:value-of select="following-sibling::*[name()
= concat('value', $index)]"/>
</td>
</tr>
</xsl:template>
输出:
<table>
<tr>
<td>Label a</td>
<td>Value a</td>
</tr>
<tr>
<td>Label b</td>
<td>Value b</td>
</tr>
<tr>
<td>Label c</td>
<td>Value c</td>
</tr>
</table>
