有没有人知道是否可以循环模板并根据迭代次数提取节点值.例如,我有以下
XML结构:
<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>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。