XSL动态创建表

时间:2016-01-13 11:12:44

标签: xslt xsl-fo

我需要通过在XSL:FO中调用模板来创建一个表 对于例如 我希望能够调用模板函数

表格模板

<xsl:template name="getTable">

使用fo:table标签创建表并调用列模板并传递no of columns

的参数

创建fo:body标签并调用行模板并将no的行作为参数传递

 </xsl:template>

列模板,例如

<xsl:template name="getcolumn">
</xsl:template>
Row template

调用Cell模板并传递no of Cells参数

 </xsl:template>

单元格模板

<xsl:template name="getCell">

调用另一个模板

</xsl:template>

我已经在XSL中创建了一个表:FO。我可以在XSL中创建表:通过下面的表格,但我希望创建一个表,因为我需要多次复制它,具体取决于输入。

    <fo:table  xsl:use-attribute-sets="Table" >
                                <fo:table-column />
                                <fo:table-column />
                                <fo:table-body>
                                  <fo:table-row >
                                    <fo:table-cell  >


                                      <fo:block  xsl:use-attribute-sets="JobTaskHeaderBackground">

                                       School1
                                      </fo:block>
                                    </fo:table-cell>
                                    <fo:table-cell>
                                    <fo:block>
<xsl:call-template name="Required">
                                      <xsl:with-param name="ElementToCheck" select='m:SchoolName' />
</xsl:call-template>
                                    </fo:block>
                                 </fo:table-cell>
                              </fo:table-row>
                              </fo:table-body>
                              </fo:table>

1 个答案:

答案 0 :(得分:0)

  

我需要多次复制它,具体取决于参数   例如(NoOfTables)PARAM = 2

您可以递归地进行模板调用,例如:

<xsl:template name="generate-tables">
    <xsl:param name="number-of-tables"/>
    <xsl:param name="number-of-rows"/>
    <xsl:param name="number-of-columns"/>

    <xsl:if test="$number-of-tables > 1">

    <!-- code to generate a table -->

    <!-- recursive call -->
    <xsl:call-template name="generate-tables">
        <xsl:call-template name="repeat">
            <xsl:with-param name="number-of-tables" select="$number-of-tables - 1"/>
            <xsl:with-param name="number-of-rows" select="$number-of-rows"/>
            <xsl:with-param name="number-of-columns" select="$number-of-columns"/>
        </xsl:call-template>
    </xsl:if>
</xsl:template>

这假设您希望所有生成的表具有相同数量的行和列。