HTMLAgilityPack verwenden Extrahieren Sie Text, der nicht zwischen Tags liegt und nach einem bestimmten Knoten kommt

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

Frage

HTML Quelltext:

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

C # -Code:

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

Was ich bekomme: CAR

Ich benötige:
AUTO
Auto ist etwas, was man fahren kann.

Irgendwelche Vorschläge? Ich habe versucht, die nächsten Knoten hinzuzufügen, aber ich gab NullReferenceExceptions: "// b [enthält (text (), 'CAR') / br]" und "// b [enthält (text (), 'CAR') / br / br) "

Danke im Voraus. PS.Ich möchte Regex vermeiden ..

Akzeptierte Antwort

XPATH ist Groß-und Kleinschreibung (siehe hier für mehr darüber: Ist es möglich, Groß- / Kleinschreibung mit Xpath und c # zu ignorieren? ) Und die zweite Phrase, die "Car" enthält, ist kein Kind ein B-Element. Du könntest es so funktionieren lassen:

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

In einer Konsolenanwendung gibt es Folgendes aus:

 CAR

  Car is something you can drive.


Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum