XSL FO:在段落之间打印一个空行

时间:2016-11-10 13:02:33

标签: xml xslt-1.0

我有一些XML数据和一个XSL FO样式表来格式化XML。我有以下XML文档:

<Content>
<Para>Paragraph One.</Para> 
<Para /> 
<Para>Paragraph Two.</Para> 
<Para /> 
<Para>Paragraph Three.</Para>
</Content>

使用FO样式表设置样式后所需的输出为:

Paragraph One.

Paragraph Two.

Paragraph Three.

我得到的实际输出在下面,总是有两个空行。

Paragraph One.


Paragraph Two.


Paragraph Three.

我使用的样式表代码是:

<xsl:stylesheet
    version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:fo="http://www.w3.org/1999/XSL/Format">

<xsl:variable name="NewLine">
    <xsl:text>&#10;&#10;</text>
</xsl:variable>

<xsl:template match="/">
    <fo:root>
        <fo:layout-master-set>
            <fo:simple-page-master master-name="pageSetup">
                <fo:region-body region-name="xsl-region-body" />
            </fo:simple-page-master>
        </fo:layout-master-set>

        <fo:page-sequence master-reference="pageSetup">
            <fo:flow flow-name="xsl-region-body">
                <fo:block>
                    <xsl:apply-templates />
                </fo:block>
            </fo:flow>
        </fo:page-sequence>

    </fo:root>
</xsl:template>

<xsl:template match="Para">
    <fo:block
        linefeed-treatment="preserve"
        white-space-collapse="false">
        <xsl:choose>
            <xsl:when test="text() != ''">
                <xsl:value-of select="text()" />
            </xsl:when>
            <xsl:otherwise>
                <xsl:value-of select="$NewLine" />
            </xsl:otherwise>
        </xsl:choose>
</xsl:template>

</xsl:stylesheet>

1 个答案:

答案 0 :(得分:0)

在块之间获取空间的传统方法是使用space-before@kjhughes)和/或space-afterhttps://www.w3.org/TR/xsl11/#space-before)属性。

如果您要在XML中保留空Para元素,则可以忽略它们并使用space-after替换Para的模板:

<xsl:template match="Para[text()]">
    <fo:block space-after="1em">
        <xsl:apply-templates />
    </fo:block>
</xsl:template>