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」ごとに1つの行を作成します。
問題は、対応するデータがない場合、次の例外が発生することです。

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 に答える