首页 > 解决方案 > FOP XSL 1.0 替换文本并保留换行符

问题描述

我正在尝试使用 xsl + xml 生成 pdf,但我在文档的一部分存在问题,其中有一些带有换行符的文本行。生成文档时,它没有保留这些换行符。

我已经尝试了一切,我完全卡住了。

我的代码是:

<fo:table-row>
            <fo:table-cell margin-right="0mm" margin-left="0mm"
                margin-bottom="0mm" margin-top="0mm"
                xsl:use-attribute-sets="bordergris" number-columns-spanned="5">
                <fo:block xsl:use-attribute-sets="titoldades" 
                    space-before.optimum="0pt" space-after.optimum="0pt"
                    keep-together="always" >
                            More info:
                </fo:block>                                     
                <fo:block xsl:use-attribute-sets="dades"  
                    space-before.optimum="0pt" space-after.optimum="0pt"
                    keep-together="always" linefeed-treatment="preserve">
                                            
                    <xsl:call-template name="replace-string">
                      <xsl:with-param name="text" select="/Response/DataList/Data/MoreInfo"/>
                      <xsl:with-param name="replace" select="'  '" />
                      <xsl:with-param name="with" select="'&lt;fo:block/&gt;'"/>
                    </xsl:call-template>

                </fo:block>                                     
            </fo:table-cell>                                
        </fo:table-row> 

其中使用模板功能:

<xsl:template name="replace-string">
<xsl:param name="text"/>
<xsl:param name="replace"/>
<xsl:param name="with"/>
<xsl:choose>
  <xsl:when test="contains($text,$replace)">
    <xsl:value-of select="substring-before($text,$replace)"/>
    <xsl:value-of select="$with"/>
    <xsl:call-template name="replace-string">
      <xsl:with-param name="text"
        select="substring-after($text,$replace)"/>
      <xsl:with-param name="replace" select="$replace"/>
      <xsl:with-param name="with" select="$with"/>
    </xsl:call-template>
  </xsl:when>
  <xsl:otherwise>
    <xsl:value-of select="$text"/>
  </xsl:otherwise>
</xsl:choose>

</xsl:模板>

结果文本与硬编码文本“<fo:block/>”一起出现,而不是应用换行符。

我究竟做错了什么?

谢谢!!!

标签: xsltapache-fop

解决方案


重要的是将以下属性放入 fo:block 中:

inefeed-treatment="preserve" white-space-collapse="false" white-space-treatment="preserve"

然后使用以下内容进行替换:

<fo:block xsl:use-attribute-sets="dades"  
                    linefeed-treatment="preserve" white-space-collapse="false" white-space-treatment="preserve">

                    <xsl:call-template name="replace-string">
                      <xsl:with-param name="text" select="/Response/DataList/Data/MoreInfo"/>
                      <xsl:with-param name="replace" select="'  '" />
                      <xsl:with-param name="with" select="'&#xa;'"/>
                    </xsl:call-template>

推荐阅读