在段落之间只打印一个空白行



我有一些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>

获取块间空间的常规方法是使用space-before (https://www.w3.org/TR/xsl11/#space-before)和/或space-after (https://www.w3.org/TR/xsl11/#space-after)属性。

如果您打算在XML中坚持使用空的Para元素,您可以忽略它们并使用space-after,将Para的模板替换为:

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

相关内容

  • 没有找到相关文章

最新更新