Impedisci a HTMLAgilityPack di connettere parole quando usi InnerText

c# html-agility-pack

Domanda

Sto provando a fare un semplice compito di ottenere del testo dal documento HTML. Quindi sto usando HTMLdoc.DocumentNode.InnerText per quello. Il problema è che su alcuni siti non si mettono spazi tra le parole quando si trovano in tag diversi. In questi casi DocumentNode.InnerText connette quelle parole in una sola e diventa inutile.

per esempio, sto cercando di leggere un sito che contiene quella linea

<span>Ä°stanbul</span><ul><li><a href="i1.htm">Adana</a></li>

Sto ottenendo "Ä ° stanbulAdana" che non ha senso.

Non sono riuscito a trovare alcuna soluzione alla documentazione HTMLAgilityPack né a Google

Mi manca qualcosa?

Grazie,

Risposta accettata

Questo dovrebbe essere piuttosto facile da fare.

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"

Risposta popolare

Bene, lo snippet di codice si blocca per questo esempio:

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

Non si blocca senza la clausola join (ma nemmeno gli spazi correttamente).



Related

Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow