2008-10-23 6 views
5

Für den Moment der beste Weg, die ich DOM aus einem String in der Lage gefunden haben, zu manipulieren, die HTML enthalten ist:Wie kann ich das DOM aus einer Zeichenfolge von HTML in C# bearbeiten?

WebBrowser webControl = new WebBrowser(); 
webControl.DocumentText = html; 
HtmlDocument doc = webControl.Document; 

Es gibt zwei Probleme:

  1. Benötigt die WebBrowser Objekt!
  2. Dies kann nicht mit mehreren Threads verwendet werden; Ich brauche etwas, das auf einem anderen Thread (außer dem Hauptthread) funktionieren würde.

Irgendwelche Ideen?

+0

http://msdn.microsoft.com /en-us/library/aa290341%28v=vs.71%29.aspx – ThunderGr

Antwort

16

Ich habe eine Suche nach GooglePlex für HTML und ich fand Html Agility Pack Ich weiß nicht, ob es dafür ist oder nicht, ich lade es gerade jetzt, um es zu versuchen.

+1

Html Agility Pack ist genial –

+0

Dito - Ich war eigentlich im Begriff, HTML Tidy zu empfehlen, um das Dokument in eine gute Form zu bringen und es dann in ein XmlDocument umzuwandeln, aber vielleicht können Sie das mit dem HTML Agility Pack überspringen. Gutes Zeug. –

+0

Agility Pack funktioniert gut mit HTML und Thread! Ich habe meine Antwort bekommen! Danke alles !!! –

6

Je nachdem, was Sie versuchen zu tun (vielleicht können Sie uns weitere Details geben?) Und abhängig davon, ob oder nicht die HTML gut ausgebildet ist, Sie könnte dies einem XmlDocument konvertieren:

System.Xml.XmlDocument x = new System.Xml.XmlDocument(); 
x.LoadXml(html); // as long as html is well-formed, i.e. XHTML 

Dann könnten Sie es leicht manipulieren, ohne die WebBrowser Instanz. Was Threads betrifft, weiß ich nicht genug über die Implementierung von XmlDocument, um die Antwort zu diesem Teil zu wissen.


Wenn das Dokument nicht in der richtigen Form ist, könnten Sie NTidy (.NET Wrapper für HTML Tidy) verwenden Sie es zuerst in Form zu bringen; Ich musste dieses Ding einmal für ein Projekt machen und es war wirklich nicht so schlimm.

+0

Das Dokument ist möglicherweise nicht gut formatiert das ist, warum das XmlDocument möglicherweise nicht funktioniert, aber ich schätze die Alternative. –

5

JasonBunting hat dies bereits veröffentlicht, aber es funktioniert wirklich, einen .net-Wrapper um HTML-Tidy zu verwenden und es in einem XmlDocument zu laden.

ich diesen NET-Wrapper verwendet haben:

http://www.codeproject.com/KB/cs/ZetaHtmlTidy.aspx

und umgesetzt es so etwas:

string input = "<p>crappy html<br <img src=foo></div>"; 
HtmlTidy tidy = new HtmlTidy() 
string output = tidy.CleanHtml(input, HtmlTidyOptions.ConvertToXhtml); 
XmlDocument doc = new XmlDocument(); 
doc.LoadXml(output); 

Sorry, wenn ein repost betrachtet :)

1

Dieses eine ist alte Frage. Nun gibt es: