我使用以下转换从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)
因此我的问题:如果没有可用数据,如何在没有正文的情况下创建有效表?
答案 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>