2016-11-10 1 views
0

Ich habe einige XML-Daten und ein XSL FO Stylesheet, um das XML zu formatieren. Ich habe die folgende XML-Dokument:XSL FO: Drucken Sie nur eine einzelne leere Zeile zwischen den Absätzen

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

die gewünschte Ausgabe nach wäre mit einem FO Stylesheet Styling:

Paragraph One. 

Paragraph Two. 

Paragraph Three. 

Der tatsächliche Ausgang ich immer bin, ist unten, gibt es immer zwei Leerzeilen.

Paragraph One. 


Paragraph Two. 


Paragraph Three. 

Der Stylesheet-Code Ich verwende ist:

<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

Was ist der Sinn des Einsetzens Zeilenvorschüben? Um zusätzlichen Leerraum nach einem Absatz hinzuzufügen? Wenn ja, sollten Sie Ihrem ''s ein Padding oder einen Rand hinzufügen. – potame

Antwort

0

Der herkömmliche Weg, um Platz zu bekommen zwischen den Blöcken die space-before (https://www.w3.org/TR/xsl11/#space-before) und/oder space-after (https://www.w3.org/TR/xsl11/#space-after) Eigenschaften zu verwenden wären.

Wenn Sie mit leeren Para Elemente in Ihrem XML bestehen bleiben werden, können Sie sie ignorieren und space-after verwenden, indem Sie Ihre Vorlage für Para mit dem Ersetzen:

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