2016-03-31 7 views
1

Ich verwende ein Webbrowser-Steuerelement, um Benutzern zu ermöglichen, sich über eine Desktop-App (Windows-Formular) beim Server anzumelden. Nach erfolgreicher Antwort sendet der Server die Antwort als XML mit dem Sicherheitstoken, aber ich kann dieses XML nicht vom WebBrowser-Steuerelement lesen. Die Browsersteuerung konvertiert das XML in seltsames HTML, das ich nicht verarbeiten kann. Hier ist mein Code: -Wie .NET WebBrowser Control die Antwort des XML-Servers korrekt liest?

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"); 
     } 
    } 

und das ist mein XML, die ich vom Server empfangen

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

+0

Hilfe für dieses Problem – yo2011

+0

Sie müssen klarer sein. Welcher seltsame HTML-Server gibt zurück, was wird erwartet, xml, warum Browser überhaupt verwenden und Server nicht direkt anrufen? – Evk

+0

Ich benutze Webbrowser, um Benutzer zu loggen und ich bekomme XML Antwort vom Server, aber wenn Sie das Webbrowser Dokument HTML lesen, bekomme ich eine HTML, die ich nicht verarbeiten kann – yo2011

Antwort

1

Das WebBrowser-Steuerelement wandelt die empfangenen XML in eine HTML-Seite haben ein benutzerfreundlicheres Display. Zum Beispiel, wenn ich http://www.w3schools.com/xml/note.xml mit IE besuchen, werde ich diese interaktive Anzeige:

screenshot1

Wenn Sie an der Quelle dieser Anzeige betrachten, werden Sie dieses Dokument als HTML (beachten Sie das Add HTML interpretiert sehen CSS-Tags und Inline):

screenshot2

Dieser Code ist das, was Sie von Ihrem Web-Browser zu extrahieren, weil sie es als HTML genau wie IE tut interpretiert hat, und es ist seine Aufgabe als WebBrowser Dokument sichtbar für die machen Benutzer. Ich denke nicht, dass es eine Möglichkeit gibt, diese Funktion zu deaktivieren.

Also mein Gedanke ist, dass Sie versuchen, das Authentifizierungssystem falsch zu implementieren, es ist eine schlechte Idee, XML im WebBrowser anzuzeigen und zu versuchen, es zu extrahieren. Wenn Sie wirklich ein WebBrowser-System verwenden möchten, würde ich empfehlen, eine einfache Textantwort von Ihrem Server zu verwenden (siehe HTTP-Header Content-Type). Auf diese Weise wird der WebBrowser nicht versuchen, sie zu interpretieren.

Dann empfehle ich, dass Sie XmlDocument api anstelle des HtmlAgilityPacks verwenden, da Sie mit einem gut formatierten XML-Dokument arbeiten.

Schließlich schlage ich Ihnen auch vor, einen Blick auf this thread werfen, die über das gleiche Problem wie Ihre spricht.