我想使用for-each循环根据count的属性值显示 <td> 列。有人可以帮我实现它吗?我是 XSLT 开发的新手。
XML 节点:
<row count="72">
编辑:计数 - 此处指的是行中的列数
提前致谢。
我想使用for-each循环根据count的属性值显示 <td> 列。有人可以帮我实现它吗?我是 XSLT 开发的新手。
XML 节点:
<row count="72">
编辑:计数 - 此处指的是行中的列数
提前致谢。
如果您的计数不是数千,则可以通过简单的递归来完成。迭代是不可能的,因为 XSLT 中没有可修改的变量。
<xsl:template match="row[@count > 0]">
<xsl:call-template name="new-td">
<xsl:with-param name="count" select="@count" />
</xsl:call-template>
</xsl:template>
<xsl:template name="new-td">
<xsl:param name="count" select="0" />
<xsl:if test="$count">
<!-- create current cell -->
<td>
<!-- contents... -->
</td>
<!-- recursive step: create next cell -->
<xsl:call-template name="new-td">
<xsl:with-param name="count" select="$count - 1" />
</xsl:call-template>
</xsl:if>
</xsl:template>
根据您的 XSLT 处理器的智能程度,它会将其优化为幕后的迭代循环,以便无论多高都不太可能发生堆栈溢出错误$count
。尝试使用一个非常高的数字来找出 XSLT 处理器的反应。
推荐阅读: IBM DeveloperWorks 上的 XSL 中有效地使用递归,尤其是“递归示例 2:迭代数字”部分。
在 XSLT 2.0 中,您可以使用“to”运算符,简单地说
<xsl:template match="row">
<xsl:variable name="theRow" select="." />
<tr>
<xsl:for-each select="1 to @count">
<td><!-- insert cell contents here --></td>
</xsl:for-each>
</tr>
</xsl:template>
内for-each
,.
将是当前数字,因此如果您需要访问该row
元素,则需要将其保存在变量中。