XSLT - 将表格结构转换为FO

3
我想要创建一个转换,以获得所需的OUTPUT。我尝试了各种转换,但都没有成功。我尝试在<fo:table-body><fo:table-row>元素之间放置<xsl:for-each>,但出现了错误,提示缺少一个子元素(即<fo:table-row>)。希望能得到帮助。 INPUT
<table>
<tgroup>
    <thead>
        <row>
            <entry>A</entry>
            <entry>B</entry>
        </row>
    </thead>
    <tbody>
        <row>
            <entry>a1</entry>
            <entry>a2</entry>
        </row>
        <row>
            <entry>b1</entry>
            <entry>b2</entry>
        </row>
    </tbody>
</tgroup>
</table>

输出

<fo:table>
    <fo:table-body>
        <fo:table-row font-weight="bold">
            <fo:table-cell>
                <fo:block>A</fo:block>
            </fo:table-cell>
            <fo:table-cell>
                <fo:block>B</fo:block>
            </fo:table-cell>
        </fo:table-row>
        <fo:table-row>
            <fo:table-cell>
                <fo:block>a1</fo:block>
            </fo:table-cell>
            <fo:table-cell>
                <fo:block>a2</fo:block>
            </fo:table-cell>
        </fo:table-row>
        <fo:table-row>
            <fo:table-cell>
                <fo:block>b1</fo:block>
            </fo:table-cell>
            <fo:table-cell>
                <fo:block>b2</fo:block>
            </fo:table-cell>
        </fo:table-row>
    </fo:table-body>
</fo:table>
1个回答

3

从样本中很难确定如何在for-each错误方面提供建议,因为我认为它与xpath相关,并且没有相关参考。

这里有一个替代方案,使用apply-templates代替for-each。(而且在这种情况下,使用apply-templates比for-each更好):

<xsl:template match="table">
    <fo:table>
        <fo:table-body>
            <xsl:apply-templates select="tgroup/*/row"/>
        </fo:table-body>
    </fo:table>
</xsl:template>

<xsl:template match="thead/row">
    <fo:table-row font-weight="bold">
        <xsl:apply-templates select="entry" />
    </fo:table-row>
</xsl:template>

<xsl:template match="tbody/row">
    <fo:table-row>
        <xsl:apply-templates select="entry" />
    </fo:table-row>
</xsl:template>

<xsl:template match="entry">
    <fo:table-cell>
        <fo:block><xsl:value-of select="."/></fo:block>
    </fo:table-cell>
</xsl:template>

希望这能帮到你。
附言:如果你需要在for-each循环方面获得帮助,你可以发布一段你尝试过但没有成功的代码样例。

你的解决方案看起来非常不错。我明天会尝试并告诉你进展情况。现在先谢谢你。 - user219882
2
我已经编辑了这个答案,删除了模式(希望你喜欢我的编辑)+1,因为正确的方法可以建立表格。 - Emiliano Poggi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接