我有一些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> </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>
答案 0 :(得分:0)
在块之间获取空间的传统方法是使用space-before
(@kjhughes)和/或space-after
(https://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>