Empêcher HTMLAgilityPack de connecter des mots lors de l'utilisation d'InnerText

c# html-agility-pack

Question

J'essaie de faire une tâche simple d'obtention de texte à partir d'un document HTML. J'utilise donc HTMLdoc.DocumentNode.InnerText pour cela. Le problème est que sur certains sites, ne placez pas d'espaces entre les mots lorsqu'ils se trouvent dans des balises différentes. Dans ces cas, DocumentNode.InnerText connecte ces mots en un seul mot et devient inutile.

par exemple, j'essaie de lire un site contenant cette ligne

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

Je suis en train de recevoir "StanbulAdana" qui n'a pas de sens.

Je n'ai trouvé aucune solution dans la documentation de HTMLAgilityPack ni dans Google.

Est-ce que je manque quelque chose?

Merci,

Réponse acceptée

Cela devrait être assez facile à faire.

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"

Réponse populaire

Eh bien, l'extrait de code se bloque pour cet exemple:

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

Il ne se bloque pas sans la clause join-clause (mais il ne met pas non plus les espaces correctement)




Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi