2012-08-03 81 views
2

我正在使用C#3.5。我有一个传递给XslCompiledTransform对象的XML字符串。然后我在WebBrowser中显示输出。除了XML元素包含需要在WinForms HTML浏览器中显示的额外空格外,所有工作都很好。我无法在html中使用任何javascript。下面是一个示例XML元素:要在HTML控件中显示的XML元素中的空格

<myelement>Here is where   extra spaces need to be retained</myelement> 

我试图与"&nbsp;"替换字符串“”,但由所使用的XslCompiledTransform对象以转换无效(XML是无效的)的XML。然后,我尝试用"&amp;nbsp"替换“”,但文本&amp;nbsp;出现在我的html而不是空格中。我怎样才能让额外的空间出现?

回答

4

添加

xml:space="preserve" 

您的XSL样式表或您的输入文档。

Here's a thorough guide到XSLT中的空白处理。

编辑:

要保留空白中呈现的HTML,要在其中保留空白的元素上使用CSS样式white-space:pre

+1

空格被保留,但HTML不会显示额外的空格。他们需要重写为nbsp;所以HTML显示正确。 – user31673 2012-08-03 23:32:52

+0

@ user31673看我的编辑。 – spender 2012-08-04 08:33:40

1

&nbsp;是XHTML DTD中的一个实体,它的实际值是字符&#xA0;

因此,您需要用&#xA0;替换每个空格。

简单:

translate(., ' ', '&#xA;') 

下面是一个完整的例子

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" encoding="ascii"/> 

<xsl:template match="/*"> 
    <p> 
     <xsl:value-of select="translate(., ' ', '&#xA0;')"/> 
    </p> 
</xsl:template> 
</xsl:stylesheet> 

当这个变换所提供的XML文档应用:

<myelement>Here is where   extra spaces need to be retained</myelement> 

有用,正确的结果产生

<p>Here&#160;is&#160;where&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;extra&#160;spaces&#160;need&#160;to&#160;be&#160;retained</p> 

并且它显示在浏览器作为

这里 是 其中                     额外 空间 需要 至 为 保留

+0

非中断空间与正常空间不同,因为如所宣称的那样,它们不会导致换行并且可能导致布局问题。 IMO滥用和最好避免。 – spender 2012-08-06 11:04:02

+0

@spender,是的,我倾向于相信。但是,OP希望这样做,并要求提供特定的XSLT帮助。 – 2012-08-06 11:57:51

+0

评论是针对真正的OP。你的答案很好! – spender 2012-08-06 18:24:19