【问题标题】:Displaying XHTML elements with namespaces in .NET WebBrowser control在 .NET WebBrowser 控件中显示具有命名空间的 XHTML 元素
【发布时间】:2012-05-19 05:20:01
【问题描述】:

我有一个 XML 文档,其中包含一个元素中的 XHTML 片段,特别是一个或多个 p 标记,这些标记可以包含更多的 XHTML 标记,例如 em span 等。这些都在“xhtml”命名空间中,并且 XSD 已经导入了 XHTML 严格模式,所以在这方面一切都很好。我的问题是这样的:

我的应用程序需要将这些 XHTML 段落显示为文档。我的想法是将它们包装在一个 XHTML 文档中,并在 body 标记上指定一个命名空间,如下所示:

<!-- Stock XHTML pre-amble from application -->
<html>
<head>
    <meta http-equiv="content-type" 
        content="application/xhtml+xml;charset=utf-16" />
</head>
<body xmlns:xhtml="http://www.w3.org/1999/xhtml">
  <!-- Elements from XML document -->
  <xhtml:p>Namespaced paragraph from XML</xhtml:p>  
  <xhtml:p>A partly <xhtml:em>italicised</xhtml:em> paragraph from XML</xhtml:p>
<!-- Post-amble -->
</body> 
</html>

这样,在将文档放在一起时,我不必从 XHTML 元素中删除所有名称空间。

虽然这在 Firefox 中正确显示,但如果我将其保存为文件,在 System.Windows.Forms.WebBrowser 控件 (.NET 3.0) 中,两个段落一起流动并且 em 是忽略(同样的事情发生在 IE8 中)。换句话说,WebBrowser 不理解命名空间,并将 xhtml:p 视为未知元素。

从纯学术的角度来看,我很好奇 Firefox 或 IE8 是否适合这里,但我更感兴趣的是这个问题的实用解决方案,如果存在的话。

【问题讨论】:

  • 当你说它在 Firefox 中正确显示时,你是如何测试它的?
  • 我将生成的文档(类似于上面的示例,但内容更大)保存为扩展名为 .html 的文件,并在 IE 和 FF 中打开。在 IE 中,段落一起流动,就好像它们没有包含在任何标签中一样,而在 FF 中,它们位于具有正常段落距离的单独行上。从纯粹的规范法律角度来看,我不知道这是否正确,但这是我所期望和想要的。我没有在其他浏览器上测试过,因为我真的只关心在 C#/.NET 桌面 GUI 中显示它。
  • 您在 IE 中看到的是正确的行为,以您没有文档类型为模,因此不清楚“正确”实际上是什么。但是如果不使用 .xhmtl 扩展,我无法重现您在 Firefox 中看到的内容。

标签: c# .net xml xhtml


【解决方案1】:

IE8 不支持“真正的”XHTML,因此您的带有冒号的元素根本不在命名空间中。事实上,如果您在 IE8 中检查 DOM,您会发现元素甚至没有正确地包裹文本。

我怀疑 WebBrowser 控件也是如此。

【讨论】:

  • 好的,谢谢。我想这意味着我必须去掉命名空间作为包装的一部分。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-18
  • 1970-01-01
  • 2018-10-08
相关资源
最近更新 更多