Запретить HTMLAgilityPack соединять слова при использовании InnerText

c# html-agility-pack

Вопрос

Я пытаюсь сделать простую задачу получения текста из HTML-документа. Поэтому я использую для этого HTMLdoc.DocumentNode.InnerText. Проблема в том, что на некоторых сайтах не помещайте пробелы между словами, когда они находятся в разных тегах. В этих случаях DocumentNode.InnerText соединяет эти слова с одним и становится бесполезным.

например, я пытаюсь прочитать сайт, содержащий эту строку

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

Я получаю «Ä stanbulAdana», что не имеет смысла.

Я не мог найти решение в документации HTMLAgilityPack и Google

Я что-то упускаю?

Благодаря,

Принятый ответ

Это должно быть довольно легко сделать.

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"

Популярные ответы

Ну, фрагмент кода висит для этого примера:

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

Он не зависает без предложения join (но он неправильно помещает пробелы).



Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему