Подтвердить что ты не робот

Как реализовать возврат каретки в XSLT

Я хочу реализовать возврат каретки в xslt. Проблема в том, что у меня есть varible: Шаг 1 = Значение 1 breaktag Шаг 2 = Значение 2 как строка и должно выглядеть как

Шаг 1 = Значение 1

Шаг 2 = Значение 2

в форме HTML, но я получаю ярлык br на странице. Хорошие способы реализации перевода строки/возврата каретки в xsl будут оценены

4b9b3361

Ответ 1

Я разделил значения на Environment.NewLine, а затем использовал pre tag в html для эмуляции эффекта, который я искал

Ответ 2

В качестве альтернативы

<xsl:text>
</xsl:text>

вы можете использовать

<xsl:text>&#10;</xsl:text> <!-- newline character -->

или

<xsl:text>&#13;</xsl:text> <!-- carriage return character -->

если вы не хотите испортить свой отступ

Ответ 3

Это работает для меня, как возврат каретки + корм для жизни.

<xsl:text>&#xD;&#xA;</xsl:text>

"& # 10;" строка не работает.

Ответ 4

используйте простой возврат каретки в текстовом элементе xsl:

<xsl:text>
</xsl:text>

Ответ 5

Попробуйте это в конце строки, где вы хотите вернуть карету. Это сработало для меня.

<xsl:text><![CDATA[<br />]]></xsl:text>

Ответ 6

Я искал прекрасное решение для этого, как многие предпочли бы, без встраивания escape-последовательностей непосредственно в выражения или наличия странных разрывов строк внутри переменной. Я нашел, что гибрид обоих этих подходов действительно работает, вставив текст node внутри переменной следующим образом:

<xsl:variable name="newline"><xsl:text>&#10;</xsl:text></xsl:variable>
<xsl:value select="concat(some_element, $newline)" />

Другим приятным побочным эффектом является то, что вы можете передать любую новую строку, будь то только LF, CR или оба CRLF.

- Daniel

Ответ 7

Вот подход, который использует рекурсивный шаблон, который ищет &#10; в строке из базы данных, а затем выводит подстроку раньше. Если после &#10; есть подстрока, то шаблон вызывает себя, пока ничего не останется. В случае отсутствия &#10; текст просто выводится.

Вот вызов шаблона (просто замените @ActivityExtDescription на поле базы данных):

<xsl:call-template name="MultilineTextOutput">
    <xsl:with-param name="text" select="@ActivityExtDescription" />
</xsl:call-template>

и вот код для самого шаблона:

<xsl:template name="MultilineTextOutput">
<xsl:param name="text"/>
<xsl:choose>
    <xsl:when test="contains($text, '&#10;')">
        <xsl:variable name="text-before-first-break">
            <xsl:value-of select="substring-before($text, '&#10;')" />
        </xsl:variable>
        <xsl:variable name="text-after-first-break">
            <xsl:value-of select="substring-after($text, '&#10;')" />
        </xsl:variable>

        <xsl:if test="not($text-before-first-break = '')">
            <xsl:value-of select="$text-before-first-break" /><br />
        </xsl:if>

        <xsl:if test="not($text-after-first-break = '')">
            <xsl:call-template name="MultilineTextOutput">
                <xsl:with-param name="text" select="$text-after-first-break" />
            </xsl:call-template>
        </xsl:if>
    </xsl:when>
    <xsl:otherwise>
        <xsl:value-of select="$text" /><br />
    </xsl:otherwise>
</xsl:choose>

Работает как шарм!!!

Ответ 8

Самый чистый способ, который я нашел, - вставить объявления !ENTITY в начало таблицы стилей для новых строк, вкладок и других общих текстовых конструкций. Когда вам нужно вставить в ваш результат множество элементов форматирования, это делает лист преобразования более чистым.

Например:

<?xml version="1.0"?>
<!DOCTYPE xsl:stylesheet [
    <!ENTITY nl "<xsl:text>
</xsl:text>">
]>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:template match="step">
    &nl;&nl;
    <xsl:apply-templates  />
  </xsl:template>

...   

Ответ 9

Я считаю, что для этого можно использовать тег xsl: text, как в

<xsl:text>
</xsl:text>

Скорее всего, добавив закрывающий тег в собственную строку, новая строка является частью литерального текста и выводится как таковой.

Ответ 10

Это единственное решение, которое сработало для меня. Кроме того, что я заменял & Амп; # 10; с\r\n