-1

我想使用for-each循环根据count的属性值显示 <td> 列。有人可以帮我实现它吗?我是 XSLT 开发的新手。

XML 节点:
<row count="72">

编辑:计数 - 此处指的是行中的列数

提前致谢。

4

2 回答 2

1

如果您的计数不是数千,则可以通过简单的递归来完成。迭代是不可能的,因为 XSLT 中没有可修改的变量。

<xsl:template match="row[@count &gt; 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:迭代数字”部分

于 2013-08-05T11:35:43.737 回答
1

在 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元素,则需要将其保存在变量中。

于 2013-08-05T12:33:17.043 回答