xml – 循环中的XSLT动态节点名称
发布时间:2020-12-16 22:54:58 所属栏目:百科 来源:网络整理
导读:有没有人知道是否可以循环模板并根据迭代次数提取节点值.例如,我有以下 XML结构: nodes node label1Label a/label1 value1Value a/value1 label2Label b/label2 value2Value b/value2 label3Label c/label3 value3Value c/value3 etc... /node/nodes 总共有
有没有人知道是否可以循环模板并根据迭代次数提取节点值.例如,我有以下
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> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |