Html Agility Pack получить конкретный контент из div

c# html html-agility-pack

Вопрос

Я пытаюсь вытащить текст из «div» и исключить все остальное. Не могли бы вы мне помочь ?!

<div class="article">
   <div class="date">01.01.2000</div>
   <div class="news-type"><a href="../link/page01">Breaking News</a></div>

   "Here is the location of the text i would like to pull"

</div>

Когда я вытягиваю класс «статьи», я получаю все, но я не могу / не знаю, как исключить class = «date», class = «news-type» и все в нем.

Вот код, который я использую:

HtmlDocument doc = web.Load(url);
foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//div[contains(@class,'article')]"))
{
    name_text.text += node.InnerHtml.Trim();
}

Спасибо!

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

Другой способ - использовать XPath /text()[normalize-space()] чтобы получить непустые текстовые узлы с прямым потомком из элементов div :

var divs = doc.DocumentNode.SelectNodes("//div[contains(@class,'article')]");
foreach (HtmlNode div in divs)
{
    var node = div.SelectSingleNode("text()[normalize-space()]");
    Console.WriteLine(node.InnerText.Trim());
}

dotnetfiddle demo

вывод :

"Here is the location of the text i would like to pull"

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

Вы хотите, чтобы ChildNodes были типами HtmlTextNode. Непреднамеренный предложенный код:

var textNodes = node.ChildNodes.OfType<HtmlTextNode>();
if (textNodes.Any())
{
    name_text.text += string.Join(string.Empty, textNodes.Select(tn => tn.InnerHtml));
}


Related

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