如何在XSL中的XML字符串中删除或转义新的换行符?

时间:2011-02-07 19:05:42

标签: html xml escaping xslt xslcompiledtransform

我有一个ASP多行文本框,可以将用户定义的文本保存到数据库中。当我检索数据时,我将其序列化为xml,然后通过XSL转换运行它以输出我的HTML。

在我的转换中,我通过元素的onclick事件将文本框定义的数据传递给javascript函数。

我遇到的问题...当用户将回车符输入文本框并将其保存到数据库时,会在页面加载时生成javascript错误。

我正在使用.NET的XslCompiledTransform进行转换。 XmlDocument上有一个名为PreserveWhiteSpace的属性,默认为false,可以设置为去除XML中的空格。这解决了不允许用户输入中断文本的问题,但是,如果可能的话,客户端希望保留他们输入的文本的格式。

据我所知,.NET XslCompiledTransform将回车符 - 新行转换为

。我相信这些是打破javascript的角色。

我的第一个想法是在将字符串传递给javascript函数之前去除xsl中的回车符,但是我无法找出要搜索字符串的字符。

我想另一个问题是,哪些字符存储在SQL中以便从ASP.NET文本框控件中返回回车?

直接查看数据库中的数据,SQL似乎将字符显示为“不可显示”字符或(2个空框)。

有没有人有这类事情的经验?

2 个答案:

答案 0 :(得分:0)

我能够在后面的代码中执行此操作以获得我想要的结果:

using (StringWriter sWriter = new StringWriter())
        {

            xTrans.Transform(xDoc, xslArgs, sWriter);

            return sWriter.ToString().Replace("
", "\\r\\n");
        }

答案 1 :(得分:0)

另一件我偶然发现的事情......

最初,我想找到一个不需要“编译”代码更改的问题的解决方案,即。一种在xsl中执行此操作的方法,即“短期修复”。

我先尝试过这个并没有成功......

<xsl:variable name="comment" select="normalize-space(.\Comment)" />

这基本上什么也没做,我仍然收到了javascript错误。

最后,我试过了......

<div onclick="Show('{normalize-space($comment)}'"></div>

第二个实际上是在剥离空白区域,因此,避免了javascript错误。这不是我的要求的完整解决方案,因为它只解决了javascript错误的问题,但是,它会有效地阻止用户“破坏”页面。

因此,它可以作为短期解决方案。