Если вы хотите, чтобы блок переносился в несколько строк, когда в тексте нет пробелов, попробуйте определить атрибут от wrap-option
до "wrap"
.
Если я переопишу ваш код, вы получите:
<fo:table-cell border="1pt solid black" padding="3mm 0mm"
display-align="center">
<fo:block>
<xsl:value-of select="CountryGroup"/>
</fo:block>
</fo:table-cell>
Я бы изменил код выше на:
<fo:table-cell border="1pt solid black" padding="3mm 0mm"
display-align="center">
<fo:block wrap-option="wrap"><!-- added wrap-option attribute here -->
<xsl:value-of select="CountryGroup"/>
</fo:block>
</fo:table-cell>
Подробнее об этом здесь: XSL-FO fop. Длинный текст течет в соседние ячейки / блок, скрывая там вещи
Если это не сработает, вы можете вставить пробелы нулевой ширины в свой блок, надеясь, что это поможет обернуть ваш текст в несколько строк :
<xsl:template name="string-replace-all">
<xsl:param name="text" />
<xsl:param name="replace" />
<xsl:param name="by" />
<xsl:choose>
<xsl:when test="contains($text, $replace)">
<xsl:value-of select="substring-before($text,$replace)" />
<xsl:value-of select="$by" />
<xsl:call-template name="string-replace-all">
<xsl:with-param name="text"
select="substring-after($text,$replace)" />
<xsl:with-param name="replace" select="$replace" />
<xsl:with-param name="by" select="$by" />
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$text" />
</xsl:otherwise>
</xsl:choose>
</xsl:template>
Это фрагмент кода, который я нашел здесь: XSLT 1.0: замена всех вхождений строки в наборе узлов
вместо
<xsl:value-of select="CountryGroup"/>
Вы можете попробовать (отредактировано в соответствии с предложениями ниже):
<xsl:call-template name="string-replace-all">
<xsl:with-param name="text" select="CountryGroup"/>
<xsl:with-param name="replace" select="','"/>
<xsl:with-param name="by" select="',​'"/>
</xsl:call-template>
Для пробела нулевой ширины я использовал его Unicode ​
. Если вы работаете с другой кодировкой, вам необходимо настроить это.