在 .NET WebBrowser 控件中显示具有命名空间的 XHTML 元素

本文关键字:命名空间 XHTML 元素 显示 NET WebBrowser 控件 | 更新日期: 2023-09-27 18:33:42

我有一个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是否在这里是正确的,但我更感兴趣的是这个问题的务实解决方案,如果有的话。

在 .NET WebBrowser 控件中显示具有命名空间的 XHTML 元素

IE8不支持"真正的"XHTML,所以带有冒号的元素根本不在命名空间中。事实上,如果你在IE8中检查DOM,你会发现元素甚至没有正确包装文本。

我怀疑WebBrowser控件也是如此。