Мой xslt не показывает разрывы строк в парагарфе - PullRequest
0 голосов
/ 18 февраля 2019

Мой xslt не отображает разрывы средней строки.

Ввод: Эти данные извлекаются из столбца сервера sql

 hello

 www.xyz.com

 hello
 line 1

Шаблон:

<xsl:template name="replace">
<xsl:param name="TFooter" />
<xsl:param name="search-string" select="'&#xD;&#xA;'" />
<xsl:if test="contains($TFooter, $search-string)">
  <xsl:value-of select="substring-before($TFooter, $search-string)" />
  <fo:block />
</xsl:if>
 <xsl:if test="contains($TFooter, $search-string)">
  <!-- recursive call -->
  <xsl:call-template name="replace">
    <xsl:with-param name="TFooter" select="substring-after($TFooter, $search-string)" />
  </xsl:call-template>
</xsl:if>
 </xsl:template>

Мы можем вызвать шаблон здесь:

<fo:table-row>
                <fo:table-cell padding-bottom="1mm" padding-left="0.5cm">
                  <fo:block disable-output-escaping="yes" font-size="10pt" text-align="left">
                    <xsl:call-template name="replace">
                      <xsl:with-param name="TFooter" select="FooterText" />
                    </xsl:call-template>
                  </fo:block>
                </fo:table-cell>
              </fo:table-row>

Токовый выход:

hello
www.xyz.com
hello
line 1

Желаемый выход:

hello

www.xyz.com

hello
line 1

Как я могу добиться разрывов средней линии, используя xslt 1.0?

1 Ответ

0 голосов
/ 18 февраля 2019

Я думаю, что <xsl:text>&#xD;&#xA;</xsl:text> отсутствует в шаблоне replace

Если ваш ввод (данные, извлеченные из столбца сервера sql) в формате XML, как показано ниже: (для примера)

<?xml version="1.0" encoding="UTF-8"?>
<FooterText>
     hello

     www.xyz.com

     hello
     line 1
</FooterText>

Затем код можно переписать следующим образом:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">

<xsl:template match="/">
    <fo:table-row>
        <fo:table-cell padding-bottom="1mm" padding-left="0.5cm">
            <fo:block disable-output-escaping="yes" font-size="10pt"
                text-align="left">
                <xsl:call-template name="replace">
                    <xsl:with-param name="TFooter" select="FooterText" />
                </xsl:call-template>
            </fo:block>
        </fo:table-cell>
    </fo:table-row>
</xsl:template>

<xsl:template name="replace">
    <xsl:param name="TFooter" />
    <xsl:param name="search-string" select="'&#xD;&#xA;'" />
    <xsl:if test="contains($TFooter, $search-string)">
        <xsl:value-of select="substring-before($TFooter, $search-string)" />
        <xsl:text>&#xD;&#xA;</xsl:text>
        <fo:block />
    </xsl:if>
    <xsl:if test="contains($TFooter, $search-string)">
        <!-- recursive call -->
        <xsl:call-template name="replace">
            <xsl:with-param name="TFooter"
                select="substring-after($TFooter, $search-string)" />
        </xsl:call-template>
    </xsl:if>
</xsl:template>

https://xsltfiddle.liberty -development.net / bFN1y8X / 9

...