Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在XSLT中实现回车_Xslt - Fatal编程技术网

如何在XSLT中实现回车

如何在XSLT中实现回车,xslt,Xslt,我想在xslt中实现回车。 问题是我有一个变量: 步骤1=值1断开标记步骤2=值2作为字符串并希望显示为 步骤1=值1 步骤2=值2 在HTML表单中,但我在页面上得到了br标记。任何在xsl中实现换行/回车的好方法都将受到欢迎在xsl:text元素中使用简单的回车符 <xsl:text> </xsl:text> 我相信您可以使用xsl:text标记来实现这一点,如中所示 <xsl:text> </xsl:text> 很有可能,通过将结束标

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

步骤1=值1

步骤2=值2


在HTML表单中,但我在页面上得到了br标记。任何在xsl中实现换行/回车的好方法都将受到欢迎

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

<xsl:text>
</xsl:text>

我相信您可以使用xsl:text标记来实现这一点,如中所示

<xsl:text>
</xsl:text>

很有可能,通过将结束标记放在自己的一行上,换行符就是文本的一部分,并作为文本的一部分输出。

<xsl:text>
</xsl:text>

你可以用

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


如果您不想弄乱缩进

我用Environment.NewLine分隔了这些值,然后用html中的pre标记来模拟我想要的效果

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

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

这是一种使用递归模板的方法,它查找

,然后在之前输出子字符串。
如果
和#10之后有子字符串剩余,然后模板调用自身,直到什么都没有剩下。
如果
和#10不存在,则只输出文本

以下是模板调用(只需将@ActivityExtDescription替换为数据库字段):


下面是模板本身的代码:

<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>




工作就像一个魅力

这对我来说很有效,就像马车返回+生命馈送一样

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

“ ;”字符串不起作用。

我一直在寻找一个很好的解决方案,正如许多人所希望的那样,不必在表达式中直接嵌入转义序列,也不必在变量中使用奇怪的换行符。我发现这两种方法的混合实际上是有效的,将文本节点嵌入如下变量中:

<xsl:variable name="newline"><xsl:text>&#10;</xsl:text></xsl:variable>
<xsl:value select="concat(some_element, $newline)" />
另一个很好的副作用是,你可以传入任何你想要的换行符,无论是LF、CR还是两者


--丹尼尔

我找到的最干净的方法就是插入
!换行符、制表符和其他常用文本结构的样式表顶部的实体
声明。当必须在输出中插入大量格式元素时,这会使转换表看起来更干净

例如:

<?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>

]>
&nl&nl;
。。。
这是唯一对我有效的解决方案。除了我要替换
使用\r\n

时,当您将所有XML缩进得很好时,这非常烦人,然后你必须把这个…字符串保存在数据库中,我尝试添加,但它打印标记而不是换行符。字符串保存在数据库中,我尝试添加,但它打印标记而不是换行符。我的字符串在数据库AB中,呈现时显示为原样,而不是换行符…尝试 ;不工作。在xsl文件中硬编码时工作,但我的值来自db。我认为需要更多信息来找到问题的解决方案。您能否更详细地描述如何从数据库中获取字符串以及如何应用XSL?数据库中字符串的格式是什么?是纯文本吗?XML?一般XSLT提示:不要在
xsl:variable
中使用
xsl:text
,而是使用
select
属性。(示例:
)这样,您就不会创建不必要的结果树片段。另外,您还可以使用
xsl:param
而不是
xsl:variable
,以便传递“newline”的值在运行时。这是我发现的唯一一个用于将从数据库检索的字段格式化为xml的答案。在XSLT中添加
CRLF
时效果非常好。使用JEdit和Notepad++进行验证。这可以嵌入到BI Publisher Desktop的文本元素中。根据您使用的查看器, 可能无法正常工作。它适用于记事本++或linux命令行。请参见以下非常类似的问题:
<xsl:variable name="newline"><xsl:text>&#10;</xsl:text></xsl:variable>
<xsl:value select="concat(some_element, $newline)" />
<?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>