2

我正在使用以下转换从 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>

简而言之,我为每个“list/v”创建一行
我的问题是,是否没有相应的数据,我得到以下异常

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


因此我的问题是:当没有数据可用时,如何创建没有正文的有效表?

4

3 回答 3

6

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

fopFactory.setStrictValidation(false);
于 2014-04-10T15:43:55.037 回答
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>
于 2013-02-08T10:37:24.760 回答
1

在将应用程序从 fop 0.20.25 升级到 2.1 时,我遇到了类似的情况。大量现有生成的 HTML 模板具有空元素,并且 list/v 在这种情况下不起作用。(它确实让我在正确的方向搜索) Count(child) 确实处理了这种情况:

<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>
于 2018-01-31T21:59:24.947 回答