Использование HTMLAgilityPack Извлечение текста, который не находится между тегами и появляется после определенного узла

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

Вопрос

Код HTML:

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

Код 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;
        }

Что мне удалось получить: CAR

Мне нужно получить:
АВТОМОБИЛЬ
Автомобиль - это то, чем вы можете управлять.

Какие-либо предложения? Я попытался добавить следующие узлы, но я дал NullReferenceExceptions: // // b [contains (text (), 'CAR') / br] "и" // b [contains (text (), 'CAR') / br / ш]»

Заранее спасибо. PS.I Хотел бы избежать Regex ..

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

XPATH чувствителен к регистру (подробнее см. Здесь: возможно ли игнорировать случай с использованием xpath и c #? ), А вторая фраза, содержащая «Автомобиль», не является дочерним элементом B. Вы можете заставить его работать следующим образом:

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);
}

В консольном приложении он выведет это:

 CAR

  Car is something you can drive.


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