使用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 / BR]”

提前致谢。 PS.I我想避免Regex ..

一般承认的答案

XPATH区分大小写(有关此内容的更多信息,请参见此处: 是否可以使用xpath和c#忽略大小写 )以及包含'Car'的第二个短语不是子元素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
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因