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

时间:2012-05-10 15:27:46

标签: c# .net xml xhtml

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

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

<!-- 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是否在这里,但如果存在这个问题,我对这个问题的实用解决方案更感兴趣。

1 个答案:

答案 0 :(得分:0)

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

我怀疑WebBrowser控件也一样。