Html Agility Pack ottiene contenuti specifici da un div

c# html html-agility-pack

Domanda

Sto cercando di estrarre il testo da un "div" e di escludere tutto il resto. Mi potete aiutare per favore ?!

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

Quando tiro la classe "article" ottengo tutto, ma non sono in grado / non so come escludere class = "date", class = "news-type" e tutto ciò che contiene.

Ecco il codice che uso:

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

Grazie!

Risposta accettata

Un altro modo sarebbe usare XPath /text()[normalize-space()] per ottenere nodi di testo non- diretti, diretti-figlio dagli elementi 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

produzione :

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

Risposta popolare

Si desidera che i ChildNode siano di tipo HtmlTextNode. Codice suggerito non testato:

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


Related

Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché