Verhindert, dass HTMLAgilityPack Wörter miteinander verbindet, wenn InnerText verwendet wird

c# html-agility-pack

Frage

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,

Akzeptierte Antwort

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"

Beliebte Antwort

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



Related

Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow