11 Stimmen

Wie kann ich das DOM aus einer Zeichenfolge von HTML in C# manipulieren?

Im Moment ist der beste Weg, den ich gefunden habe, um in der Lage sein, DOM von einer Zeichenfolge, die HTML enthalten zu manipulieren:

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

Es gibt zwei Probleme:

  1. Erfordert die WebBrowser Objekt!
  2. Dies kann nicht mit mehreren Threads verwendet werden; ich brauche etwas, das auf verschiedenen Threads (außer dem Hauptthread) funktionieren würde.

Irgendwelche Ideen?

0 Stimmen

25voto

Patrick Desjardins Punkte 130529

Ich habe bei GooglePlex nach HTML gesucht und Folgendes gefunden Html Agility Pack Ich weiß nicht, ob es dafür geeignet ist oder nicht, aber ich lade es gerade herunter, um es auszuprobieren.

9voto

Jason Bunting Punkte 56534

Je nachdem, was Sie vorhaben (vielleicht können Sie uns mehr Details geben?) und je nachdem, ob das HTML wohlgeformt ist oder nicht, können Sie könnte dies in eine XmlDocument :

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 sie leicht manipulieren, ohne die WebBrowser Instanz. Was Threads betrifft, so weiß ich nicht genug über die Implementierung von XmlDocument um die Antwort auf diesen Teil zu kennen.


Wenn das Dokument nicht in der richtigen Form ist, können Sie NTidy (.NET-Wrapper für HTML-Aufgeräumt ), um sie erst einmal in Form zu bringen; ich musste genau das einmal für ein Projekt tun, und es war wirklich nicht allzu schlimm.

7voto

Martin Kool Punkte 4130

JasonBunting hat dies bereits gepostet, aber es funktioniert wirklich, einen .net Wrapper um HTML tidy zu verwenden und es in ein XmlDocument zu laden.

Ich habe diesen .net-Wrapper bereits verwendet:

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

Und ich habe es in etwa so umgesetzt:

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

Tut mir leid, wenn es als Wiederholung angesehen wird :)

5voto

Ashraf Sabry Punkte 2871

Dies ist eine alte Frage. Jetzt gibt es sie:

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X