XSL FO:在段落之间打印一条空行
问题描述:
我有一些XML数据和一个XSL FO样式表来格式化XML。我有下面的XML文档:XSL FO:在段落之间打印一条空行
<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> </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
元素坚持,你可以忽略它们,并通过更换你的模板Para
使用space-after
有:
<xsl:template match="Para[text()]">
<fo:block space-after="1em">
<xsl:apply-templates />
</fo:block>
</xsl:template>
什么是插入换行的意义呢?在段落之后添加额外的空白空间?如果是这样,你应该为你的''添加填充或边距。 –
potame