0

我使用 WebBrowser 来显示生成的 XML。我的 XML 字符串通过调用 NavigateToString 加载到浏览器中:

var text = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" 
         + Environment.NewLine
         + "<whatever/>";
Browser.NavigateToString(text);

浏览器加载字符串内容后,我尝试使用标准 Ctrl+F 搜索对话框搜索任何显示的文本 - 但它始终显示警告“未找到匹配项”。

如果我将 XML 字符串保存到文件中并使用 Browser.Navigate(filename) 它可以工作。

有任何想法吗?

4

2 回答 2

0

当您导航到一个文件时,WebBrowser控件会执行 MIME 类型的嗅探(通常使用文件扩展名作为提示)。然后它会创建一个相应类型的Active Document对象。大多数情况下,它是MSHTML Document的一个实例,但也可以是 XML、PDF 或 Word 文档,所有这些都支持 Active Document 接口。

现在,当您使用 导航到字符串时NavigateToStringWebBrowser不会尝试识别文档类型,而是简单地创建 MSHTML 文档(而不是 XML 文档)的实例,然后尝试将内容解析为 HTML 并失败。

我认为您无法使用 获得所需的行为NavigateToString,我相信这同样适用于NavigateToStream. 为了说明发生了什么,将您的 XML 内容保存为filename.html,filename.txtfilename.xml. 尝试用 IE 打开每个文件。

附带说明一下,当您导航到 URL 时,服务器实际上可以选择使用 HTTP 标头来建议 MIME 类型。浏览器可能会也可能不会容忍这样的建议(它仍然会执行一些验证检查)。

底线:您将无法使用NavigateToStringor呈现 XML NavigateToStream。您必须先将其转换为 HTML(例如,使用 XSLT 转换)。

于 2013-10-09T05:34:29.220 回答
0

我只是有同样的问题。甚至可以使用重载直接打开 xml 文件:

webbrowser.Navigate(string filepathToXML)

这样一来,内置的搜索面板就像一个魅力。

于 2018-10-01T12:27:21.133 回答