使用xslt创建空间填充模板

时间:2012-09-28 16:32:23

标签: .net xml whitespace xslt-1.0

我需要创建两个填充空间的独立模板。一个占据49个空间,另一个占549个空间。我在模板上找到了我认为可以工作但我无法确切知道它在做什么,我是xml的新手。

<!-- Template Filler-->
  <xsl:template name="Filler">
    <xsl:param name="fillercount" select="1"/>
    <xsl:if test="$fillercount > 0">
      <table class="tabledetails">
        <tr>
          <td>
            <xsl:value-of select="translate(' ', ' ', '&#160;')"/>
          </td>
        </tr>
      </table>
      <xsl:call-template name="Filler">
        <xsl:with-param name="fillercount" select="$fillercount - 1"/>
      </xsl:call-template>
    </xsl:if>
  </xsl:template>

这是我需要的,并用select="49"来称呼它,或者我读错了。 如果现在这就是我需要的,我怎么能实现这个目标呢?

1 个答案:

答案 0 :(得分:0)

您还没有说出您想要的输出。如果使用参数49调用此模板,则输出将包含49个表,每个表包含一行和一个列,单元格的内容为非中断空格字符。生成不间断空格字符的方式非常奇怪:translate()调用将空格字符作为输入,然后通过用非空格替换所有空格来处理它。据推测,它是代码的缩减版本,在某个阶段做了更明智的事情。

代码的基本结构是一个递归模板,它接受一个参数,比如49,输出一个“东西”(在这种情况下是一个单例表),然后调用自己再次N-1时间做同样的事情。这是在XSLT 1.0中做N次的适当方法。 (在2.0中,您可以使用<xsl:for-each select="1 to $N">,这对于使用命令式语言的程序员来说更直观。)