Как вставить пробел между двумя (встроенными) элементами?
Я создаю документ 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:
префикс пространства имен.