Html Agility Pack obtenir du contenu spécifique d'un div

c# html html-agility-pack

Question

J'essaie d'extraire du texte d'un "div" et d'exclure tout le reste. Pouvez-vous m'aider s'il vous plaît ?!

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

Lorsque je tire la classe "article", j'obtiens tout, mais je ne peux pas / je ne sais pas comment exclure class = "date", class = "news-type", et tout ce qu'il contient.

Voici le code que j'utilise:

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

Je vous remercie!

Réponse acceptée

Une autre méthode consisterait à utiliser XPath /text()[normalize-space()] pour obtenir des nœuds de texte enfants non vides et directs à partir des éléments 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

sortie:

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

Réponse populaire

Vous voulez les ChildNodes de type HtmlTextNode. Code suggéré non testé:

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


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