【发布时间】: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 中看到的内容。