Ответ 1
Я разделил значения на Environment.NewLine, а затем использовал pre tag в html для эмуляции эффекта, который я искал
Я хочу реализовать возврат каретки в xslt. Проблема в том, что у меня есть varible: Шаг 1 = Значение 1 breaktag Шаг 2 = Значение 2 как строка и должно выглядеть как
Шаг 1 = Значение 1
Шаг 2 = Значение 2
в форме HTML, но я получаю ярлык br на странице. Хорошие способы реализации перевода строки/возврата каретки в xsl будут оценены
Я разделил значения на Environment.NewLine, а затем использовал pre tag в html для эмуляции эффекта, который я искал
В качестве альтернативы
<xsl:text>
</xsl:text>
вы можете использовать
<xsl:text> </xsl:text> <!-- newline character -->
или
<xsl:text> </xsl:text> <!-- carriage return character -->
если вы не хотите испортить свой отступ
Это работает для меня, как возврат каретки + корм для жизни.
<xsl:text>
</xsl:text>
"& # 10;" строка не работает.
используйте простой возврат каретки в текстовом элементе xsl:
<xsl:text>
</xsl:text>
Попробуйте это в конце строки, где вы хотите вернуть карету. Это сработало для меня.
<xsl:text><![CDATA[<br />]]></xsl:text>
Я искал прекрасное решение для этого, как многие предпочли бы, без встраивания escape-последовательностей непосредственно в выражения или наличия странных разрывов строк внутри переменной. Я нашел, что гибрид обоих этих подходов действительно работает, вставив текст node внутри переменной следующим образом:
<xsl:variable name="newline"><xsl:text> </xsl:text></xsl:variable>
<xsl:value select="concat(some_element, $newline)" />
Другим приятным побочным эффектом является то, что вы можете передать любую новую строку, будь то только LF, CR или оба CRLF.
- Daniel
Вот подход, который использует рекурсивный шаблон, который ищет
в строке из базы данных, а затем выводит подстроку раньше.
Если после
есть подстрока, то шаблон вызывает себя, пока ничего не останется.
В случае отсутствия
текст просто выводится.
Вот вызов шаблона (просто замените @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, ' ')">
<xsl:variable name="text-before-first-break">
<xsl:value-of select="substring-before($text, ' ')" />
</xsl:variable>
<xsl:variable name="text-after-first-break">
<xsl:value-of select="substring-after($text, ' ')" />
</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>
Работает как шарм!!!
Самый чистый способ, который я нашел, - вставить объявления !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>
...
Я считаю, что для этого можно использовать тег xsl: text, как в
<xsl:text>
</xsl:text>
Скорее всего, добавив закрывающий тег в собственную строку, новая строка является частью литерального текста и выводится как таковой.
Это единственное решение, которое сработало для меня. Кроме того, что я заменял & Амп; # 10; с\r\n