2

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

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

我尝试用“”替换字符串,"&nbsp;"但这使得 XslCompiledTransform 对象用于转换的 xml 无效(XML 无效)。然后我尝试将“”替换为,"&amp;nbsp"但随后文本&amp;nbsp;出现在我的 html 中而不是空格中。我怎样才能让多余的空间出现?

4

2 回答 2

5

添加

xml:space="preserve"

到您的 xsl 样式表或输入文档。

这是XSLT 中空白处理的详尽指南。

编辑:

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

于 2012-08-03T23:05:34.157 回答
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>

它在浏览器中显示为

这是需要保留额外空间的地方

于 2012-08-04T15:25:38.570 回答