如何在XSLT中实现回车

时间:2009-06-19 09:18:40

标签: xslt

我想在xslt中实现回车。 问题是我有一个变数: 步骤1 =值1 breaktag步骤2 =值2作为字符串,并希望显示为

步骤1 =值1

步骤2 =值2

在HTML表单中,但我在页面上获得了br标记。在xsl中实现换行符/回车符的任何好方法都将不胜感激

10 个答案:

答案 0 :(得分:42)

作为

的替代方案
<xsl:text>
</xsl:text>

你可以使用

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

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

如果你不想弄乱你的缩进

答案 1 :(得分:7)

这适合我,作为回车+生命饲料。

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

&#34;&amp;#10;&#34;字符串不起作用。

答案 2 :(得分:4)

在xsl:text元素中使用简单的回车符

<xsl:text>
</xsl:text>

答案 3 :(得分:3)

在要返回回车的行的末尾尝试此操作。它对我有用。

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

答案 4 :(得分:3)

我正在寻找一个很好的解决方案,正如许多人所希望的那样,没有直接在表达式中嵌入转义序列,或者在变量内部有奇怪的换行符。通过在这样的变量中嵌入一个文本节点,我发现这两种方法的混合实际上是可行的:

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

另一个不错的副作用是你可以传入你想要的任何换行符,无论是LF,CR还是两个CRLF。

- 丹尼尔

答案 5 :(得分:3)

我发现最干净的方法是在样式表的顶部插入!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>

...     

答案 6 :(得分:1)

这是一种使用递归模板的方法,该模板在数据库中查找字符串中的&#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>

像魅力一样工作!!!

答案 7 :(得分:0)

我相信你可以使用xsl:text标签,如

<xsl:text>
</xsl:text>

有可能通过将结束标记放在它自己的一行上,换行符是文本文本的一部分并按原样输出。

答案 8 :(得分:0)

我通过Environment.NewLine分隔值,然后在html中使用pre标签来模拟我正在寻找的效果

答案 9 :(得分:0)

这是唯一对我有用的解决方案。除了我正在替换 &安培;#10 ;使用 \ r \ n