2009-06-19 52 views
21

我想在xslt中实现回车。 问题是我有一个varible: 步骤1 =值1 breaktag步骤2 =值2作为一个字符串,并希望出现如何实现XSLT中的回车

步骤1 =值1

步骤2 =值2

在HTML形式,但我得到关于执行在XSL换行/回车的page.Any好方式BR标签将不胜感激

+0

看到这个非常相似的问题:http://stackoverflow.com/questions/723226/producing-a-new-line-in-xslt – Coder 2015-11-30 18:43:49

回答

0

我分开了v通过Environment.NewLine提供的线索,然后在html中使用预标签来模拟我正在寻找的效果

3

使用一个XSL简单回车:文本元素

<xsl:text> 
</xsl:text> 
+0

这是非常讨厌,当你有缩进你所有的XML很好,然后你必须把这个... – 2009-06-19 09:25:31

+0

该字符串是在数据库举行,我试图加入但它打印标签,而不是得到一个换行符。 – chugh97 2009-06-19 09:59:01

0

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

<xsl:text> 
</xsl:text> 

机会是,通过将结束标记在自己的行,换行符是文字文本的一部分并如此输出。

+0

字符串被保存在数据库中,我尝试添加,但它打印标记而不是换行符。 – chugh97 2009-06-19 09:58:27

42

作为替代

<xsl:text> 
</xsl:text> 

,你可以在使用的情况下

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

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

你不想弄乱你的缩进

+0

我的字符串在数据库中A B 并且在呈现时显示为原样而不是换行符...尝试 在xsl文件中硬编码时没有工作,但我的值来自db。 – chugh97 2009-06-19 11:36:22

+0

我认为需要更多信息来找到解决问题的方法。你能否更详细地描述你是如何从数据库中获取字符串以及如何应用XSL的?数据库中字符串的格式是什么?它是纯文本吗? XML? – Steef 2009-06-19 11:43:43

3

在您希望回车的行尾尝试此操作。它为我工作。

<xsl:text><![CDATA[<br />]]></xsl:text> 
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> 

作品像魅力!

+0

这是我发现的唯一答案,用于将从数据库检索的字段格式化为xml。 – swilliams 2015-08-07 16:26:57

6

这适用于我,作为回车+生活饲料。

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

“&#10;”字符串不起作用。

3

我正在寻找一个很好的解决方案,因为许多人更喜欢,而不是直接在表达式中嵌入转义序列,或者在变量内部有奇怪的换行符。我发现两者的混合动力这个方法的实际工作,通过嵌入这样的变量中一个文本节点:

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

另一个不错的这一面,影响是,你可以在任何你想要的换行符传递,无论是刚LF,CR或CRLF。

--Daniel

1

我发现的最干净的方法是在样式表换行符,标签,和其他常见的文本结构的顶部插入!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> 

...

0

这仅仅是为我工作的解决方案。除了我正在更换 &#10;与\ r \ n