如何在两个(内联)元素之间插入空格?

时间:2014-08-17 09:07:29

标签: xslt xsl-fo apache-fop

上下文

我正在创建一个XSL-FO文档,将我的XML文本转换为PDF。

在XSL-FO中,我有两个连续的内联元素,我想在它们之间留一个空格:

<fo:block>
    <xsl:number/> <xsl:value-of select="@title"/>
</fo:block>

预期结果将是:

  

1简介

相反,我得到了

  

1简介

似乎XML不考虑这个空白区域。

尝试

我尝试了几种可能的解决方案,但没有成功:

<fo:block>
    <xsl:number/><fo:inline white-space="pre">  </fo:inline><xsl:value-of select="@title"/>
</fo:block>

<fo:block>
    <xsl:number/><fo:inline margin-left="0.5cm"><xsl:value-of select="@title"/></fo:inline>
</fo:block>

这些想法都没有产生可接受的结果。

问题:

如何在两个(内联)元素之间包含空格?

3 个答案:

答案 0 :(得分:15)

尝试:

<fo:block>
    <xsl:number/>
    <xsl:text> </xsl:text>
    <xsl:value-of select="@title"/>
</fo:block>

或者:

<fo:block>
    <xsl:number/>
    <xsl:value-of select="concat(' ', @title)"/>
</fo:block>

答案 1 :(得分:4)

的问题
<fo:inline white-space="pre">  </fo:inline>

默认情况下,样式表中的所有仅空白文本节点都被删除,但xsl:text元素内的节点除外。您可以使用xml:space="preserve"

覆盖此内容
<fo:inline xml:space="preserve" white-space="pre">  </fo:inline>

将保留所有具有此属性的元素后代的空白文本节点。请注意,与普通命名空间不同,您不需要(实际上也不允许)声明xml:命名空间前缀。

答案 2 :(得分:0)

您还可以使用以下内容:

&amp;nbsp;