xsl-fo空表体(验证异常)

时间:2013-02-08 10:13:03

标签: xsl-fo

我使用以下转换从XML

创建表
<fo:table table-layout="fixed" width="100%">
    <fo:table-header>
        <fo:table-row text-align="right" font-weight="bold">
            <fo:table-cell column-number="2" text-align="center">
                <fo:block>ColA</fo:block>
            </fo:table-cell>
            <fo:table-cell column-number="3" text-align="center">
                <fo:block>Name</fo:block>
            </fo:table-cell>
            <fo:table-cell column-number="4">
                <fo:block color="red">ColB</fo:block>
            </fo:table-cell>
            <fo:table-cell column-number="5" text-align="center"
                color="red">
                <fo:block width="1cm">%</fo:block>
            </fo:table-cell>
        </fo:table-row>
    </fo:table-header>
    <fo:table-body>
        <xsl:apply-templates select="list/v" />
    </fo:table-body>
</fo:table>

简而言之,我创建了一行&#34; list / v&#34;
我的问题是,是否没有相应的数据,我得到以下例外

org.apache.fop.fo.ValidationException: "fo:table-body" is missing child elements. Required content model: marker* (table-row+|table-cell+) (No context info available)

因此我的问题:如果没有可用数据,如何在没有正文的情况下创建有效表?

3 个答案:

答案 0 :(得分:5)

也许这对你有用,这为后向兼容性删除了一些严格的验证:

fopFactory.setStrictValidation(false);

答案 1 :(得分:4)

以下工作最终起作用:

<fo:table table-layout="fixed" width="100%">
    <fo:table-header> (unchanged) </fo:table-header>
    <fo:table-body>
        <xsl:if test="list/v">
            <xsl:apply-templates select="list/v" />
        </xsl:if>
        <xsl:if test="not(list/v)">
            <fo:table-cell><fo:block /></fo:table-cell>
        </xsl:if>
    </fo:table-body>
</fo:table>

答案 2 :(得分:1)

将应用程序从0.20.25升级到2.1时,我遇到了类似的情况。 一定数量的现有生成的HTML模板具有空元素,而list / v在此实例中不起作用。 (它确实让我在正确的方向搜索) 伯爵(孩子)确实处理了这种情况:

<xsl:template match="tbody">
    <xsl:if test="count(tr)!=0">
        <xsl:apply-templates select="tr" mode="tableRow" />
    </xsl:if>
    <xsl:if test="count(tr)=0">
        <fo:table-cell><fo:block /></fo:table-cell>
    </xsl:if>
</xsl:template>