Utilisation de HTMLAgilityPack Extraire le texte, qui n'est pas entre les balises et vient après un nœud spécifique

c# html html-agility-pack web-scraping xpath

Question

Code HTML:

 <b> CAR </b>
    <br></br>
  Car is something you can drive.
    <br></br>
    <br></br>

Code C #:

        HtmlAgilityPack.HtmlDocument doc = new HtmlWeb().Load("http://website.com/x.html");

        if (doc != null)
        {
            HtmlNode link = doc.DocumentNode.SelectSingleNode("//b[contains(text(), 'CAR')]");

            webBrowser1.DocumentText = link.InnerText;
            webBrowser1.AllowNavigation = true;

            webBrowser1.ScriptErrorsSuppressed = true;
            webBrowser1.Visible = true;
        }

Ce que j'ai réussi à obtenir: CAR

J'ai besoin d'avoir:
VOITURE
La voiture est quelque chose que vous pouvez conduire.

Aucune suggestion? J'ai essayé d'ajouter les nœuds suivants, mais j'ai donné NullReferenceExceptions: "// b [contient (text (), 'CAR') / br]" et "// b [contient (text (), 'CAR')) / br / br] "

Merci d'avance. PS.I aimerait éviter Regex ..

Réponse acceptée

XPATH est sensible à la casse (voir ici pour plus d'informations: est-il possible d'ignorer la casse à l'aide de xpath et c #? ) Plus la deuxième phrase contenant 'Car' n'est pas un enfant, mais un élément B. Vous pourriez le faire fonctionner comme ceci:

HtmlDocument doc = new HtmlWeb().Load("http://website.com/x.html");
foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//text()[contains(translate(., 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), 'car')]"))
{
    Console.WriteLine(node.InnerText);
}

Dans une application console, cela produira ceci:

 CAR

  Car is something you can drive.


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