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

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>&#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> 
+0

什么是插入换行的意义呢?在段落之后添加额外的空白空间?如果是这样,你应该为你的''添加填充或边距。 – potame

的传统方法来获得空间之间的块将使用space-beforehttps://www.w3.org/TR/xsl11/#space-before)和/或space-afterhttps://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>