有没有人知道是否可以循环模板并根据迭代次数提取节点值.例如,我有以下 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>