.NET WebBrowser 控件如何正确读取 XML 服务器响应?

How .NET WebBrowser Control read XML Server response correctly?

我正在使用 Web 浏览器控件允许用户从桌面(Windows 表单)应用程序登录到服务器。成功响应后,服务器将响应发送为 XML,其中包含安全令牌,但我无法从 WebBrowser 控件中读取此 xml。浏览器控件将 XML 转换为我无法处理的奇怪 HTML。 这是我的代码:-

var webBrowser = new WebBrowser
        {
            Dock = DockStyle.Fill
        };
        webBrowser.DocumentCompleted += webBrowser_DocumentCompleted;
        webBrowser.Navigate(url);

void webBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
        var browser = sender as WebBrowser;
        if (browser != null)
        {

            HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
            doc.LoadHtml(browser.DocumentText);
            var appNode = doc.DocumentNode.SelectNodes("//myTag");
        }
    }

这是我从服务器收到的XML

<MyCustomXml>
<securityToken>RETERET-SDSDSD-DSFSDFS-SDASDAS-ASDASDASDASD</securityToken>
<organizationUrl>http://myOrganization.Com/</organizationUrl>
</MyCustomXml>

WebBrowser 控件将接收到的 XML 转换为 HTML 页面以显示更多 user-friendly。例如,如果我用 IE 访问 http://www.w3schools.com/xml/note.xml,我将看到这个交互式显示:

如果您查看此显示的来源,您会看到此文档被解释为 HTML(注意 HTML 标签的添加和内联 CSS):

此代码是您从 WebBrowser 中提取的代码,因为它已将其解释为 HTML 就像 IE 所做的那样,并且它作为 WebBrowser 的工作是使文档对用户可见。我认为没有办法禁用此功能。

所以我的想法是您试图以错误的方式实施身份验证系统,在 WebBrowser 中显示 XML 并尝试提取它是个坏主意。如果你真的想使用 WebBrowser 系统,我建议你使用来自你的服务器的纯文本响应(参见 HTTP header Content-Type),这样WebBrowser 不会尝试解释它。

关于解析,我建议您使用 XmlDocument api 而不是 HtmlAgilityPack,因为您正在处理格式良好的 XML 文档。

最后,我也建议你看看this thread,里面说的和你的问题一样