Как вставить пробел между двумя (встроенными) элементами?

Я создаю документ XSL-FO для преобразования моего XML-текста в PDF.

В XSL-FO у меня есть два элемента, я хотел бы пробел между ними:

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

конечно, 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>

все эти решения игнорируют пространство, а заголовок выглядит так: "1Introduction" вместо " 1 введение."

любая идея, как включить пробел между двумя (встроенными) элементами?

2 ответов


попробуй:

<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>

проблема с

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

это то, что по умолчанию все пробелы-только текстовые узлы в таблице стилей удаляются, за исключением тех, которые внутри xsl:text элементы. Вы можете переопределить это с помощью xml:space="preserve"

<fo:inline xml:space="preserve" white-space="pre">  </fo:inline>

будут сохранены все текстовые узлы пробелов, являющиеся потомками элемента с этим атрибутом. Обратите внимание, что в отличие от обычных пространств имен вам не нужно (и действительно не разрешено) объявлять xml: префикс пространства имен.