Ich versuche, eine einfache Aufgabe zu machen, Text vom HTML-Dokument zu erhalten. Also verwende ich HTMLdoc.DocumentNode.InnerText dafür. Das Problem besteht darin, dass auf einigen Sites keine Leerzeichen zwischen Wörtern eingefügt werden, wenn sie sich in einem anderen Tag befinden. In diesen Fällen verbindet der DocumentNode.InnerText dieses Wort in eins und es wurde nutzlos.
Zum Beispiel versuche ich eine Website zu lesen, die diese Zeile enthält
<span>İstanbul</span><ul><li><a href="i1.htm">Adana</a></li>
Ich bekomme "Ä ° stanbulAdana", was bedeutungslos ist.
Ich konnte keine Lösung in der HTMLAgilityPack-Dokumentation oder Google finden
Vermisse ich etwas?
Vielen Dank,
Das sollte ziemlich einfach sein.
const string html = @"<span>İstanbul</span><ul><li><a href=""i1.htm"">Adana</a></li>";
var doc = new HtmlDocument();
doc.LoadHtml(html);
string result = string.Join(" ", doc.DocumentNode.Descendants()
.Where(n => !n.HasChildNodes && !string.IsNullOrWhiteSpace(n.InnerText))
.Select(n => n.InnerText));
Console.WriteLine(result); // prints "İstanbul Adana"
Nun, das Code-Snippet hängt für dieses Beispiel:
const string html = @"<td><font size=""2"">abc </font><font size=""2"">(</font><font size=""2"">abc</font><font size=""2"">) </font><a href=""?query=abc"">abc</a>, abc<br><font size=""2"">abc </font>abc, <a href=""?query=abc"">abc</a>, abc, <a href=""?query=abc"">abc</a><br><font size=""2"">abc </font>abc abc, abc abc<br></td>";
Es hängt nicht ohne die Join-Klausel (aber es fügt auch keine Leerzeichen korrekt).