Как заменить данный символ новой строкой в ​​преобразовании xslt? - PullRequest
2 голосов
/ 27 сентября 2019

В настоящее время я работаю над файлом XSLT, чтобы преобразовать файл XML в файл HTML.

В моем XML я получаю данные как

    <ns0:Key>
        <ns0:Field>Comments</ns0:Field>
        <ns0:Value>line 1 ¤ line 2 ¤ etcaetera</ns0:Value>
    </ns0:Key>

И я хочу заменить'¤' новой строкой в ​​моей преобразованной HTML-странице.

Я пытаюсь использовать этот шаблон

<xsl:template name="string-replace">
            <xsl:param name="string" />
            <xsl:param name="replace" />

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

И я применил его так:

<xsl:variable name="string-mod">
            <xsl:call-template name="string-replace">
                    <xsl:with-param name="string" select="./*[local-name()='Key'][*[local-name()='Field']='Comments']/*[local-name()='Value']" />                                
                    <xsl:with-param name="replace" select="'&#164;'" />        
            </xsl:call-template>
    </xsl:variable>

Я сделал несколько попыток (я дал одну в комментарии в шаблоне) с разными символами и разметками, но пока ничего не получалось.

Если у кого-то есть идеи, было бы здорово:)

Спасибо

Обратите внимание, что я должен использовать XSLT 1.

Ответы [ 2 ]

0 голосов
/ 30 сентября 2019

[РЕШЕНО]

Спасибо, я нахожу решение на этой неделе.

С этим шаблоном:

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

Вызывается какэто:

 <xsl:call-template name="string-replace">
        <xsl:with-param name="string" select="./*[local-name()='Key'][*[local-name()='Field']='Comments']/*[local-name()='Value']" />
        <xsl:with-param name="replace" select="'&#164;'" />
    </xsl:call-template>
0 голосов
/ 27 сентября 2019

Символ новой строки в документе HTML не приводит к отображению текста на новой строке в браузере.Браузер сворачивает все последовательности пробельных символов (включая новую строку) в один пробел.Чтобы отобразить текст в новой строке, вам нужно использовать тег <br> или аналогичный.

Таким образом, вставка символов новой строки в ваш текст не имеет никакого эффекта.Вам нужно вставить разметку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...