.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,里面说的和你的问题一样
我正在使用 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,里面说的和你的问题一样