我们基于 WinForms 的应用程序获取由 Visual Studio 生成的文档文件(Xml 文档),执行一些 XSLT 转换并将结果显示在我们表单内的 WebBrowser 控件中。
问题是,我们似乎无法显示换行符,例如 xml 文档中的标记。
例如:
<member name="T:Genesys.AgentLoginData">
<summary>
This is some test summary <br />
New line here
</summary>
</member>
与 XSL 转换一起使用时,摘要文本将被截断为一行。
为简化起见,转换执行此操作以选择摘要文本:
<xsl:template match="member" >
<xsl:value-of select="summary" disable-output-escaping="yes" />
</xsl:template>
我们如何才能正确地让新行显示在我们应用程序内的 WebBrowser 控件中?
编辑:从 WebBrowser 控件添加“查看源代码”的内容。 我所追求的是“This is a method”之后的新行,等等。 浏览器只是将其显示在一行中。
<?xml version="1.0" encoding="utf-8"?><html xmlns="http://www.w3.org/1999/xhtml"><head><title>Action Help</title><style type="text/css">
p {text-indent:200px;}
li {text-indent:180px;}
h1 {color:navy;}
h2 {color:blueviolet}
h4 {color:navy;}
</style></head><body><H2 xmlns="">AgentLogin</H2><H1 xmlns=""></H1><h3 xmlns="">
This is a method
And its parameter
Check this out
name</P></body></html>
最佳答案
您可能正在寻找 xml:space="preserve"
指示。参见 http://msdn.microsoft.com/en-us/library/aa468566.aspx有关如何处理 .net 堆栈上的 XSL 和空格的体面文章。
尽管我刚刚注意到您正在 Web 浏览器控件中显示生成的转换,这可能意味着您的问题实际上与生成的 HTML 有关。尝试查看您在控件中显示的内容的源代码并将其添加到您的问题中。
查看更新后的评论并进行一些猜测,我认为您的问题是您使用的是 xsl:value-of,它只获取节点的文本,而不是 xsl:copy-of,它将获取节点的文本,以及 <br/>
元素。尝试替换这个:
<xsl:value-of select="summary" disable-output-escaping="yes" />
与
<xsl:copy-of select="summary/node()" />
您的另一个选择是转义 <br/>
以便它作为文本而不是子节点出现,并保持禁用输出转义。
关于c# - XSLT 格式代码文档 (xml) 中的换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11191789/