XPATH funktioniert nicht mit Html Agility Pack

.net c# html-agility-pack xpath

Frage

Ich versuche, den "Today's featured article" auf Wikipedia zu kratzen, indem ich den XPATH-Wert mit Firebug erhalte.

Bildbeschreibung hier eingeben

Und dann in meinen Code einfügen:

string result = wc.DownloadString("http://en.wikipedia.org/wiki/Main_Page");

            HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();

            doc.LoadHtml(result);

            var featuredArticle = doc.DocumentNode.SelectSingleNode("/html/body/div[3]/div[3]/div[4]/table[2]/tbody/tr/td/table/tbody/tr[2]/td/div/p");

FeatureArticle gibt jedoch immer null zurück. Was mache ich falsch?

Beliebte Antwort

Weil, was Firebug den XPath zeigt, wie Firefox den Html gemacht hat, kann das sein, was der Html vom Server ist oder nicht. Auch der Pfad von Firebug ist absolut, und jede kleine Änderung kann ihn brechen.

Und einfacher ist es, nur auf die Html zu schauen, das p-Tag, nach dem du suchst, befindet sich in einem div mit der ID mp-tfa , also ist es einfacher, den XPath nach div zu suchen und das erste p nach innen zu bekommen.

So was:

var wc = new WebClient();
var doc = new HtmlDocument();
doc.Load(wc.OpenRead("http://en.wikipedia.org/wiki/Main_Page"));
var featuredArticle = doc.DocumentNode.SelectSingleNode("//div[@id='mp-tfa']/p");
Console.WriteLine(featuredArticle.InnerText);

Der beste Ort, um zu lernen, wie man XPath verwendet, ist w3schools.com .

Oder Sie könnten Linq verwenden, obwohl ich denke, XPath ist ein bisschen klarer.

var featuredArticle=   doc.DocumentNode.Descendants("div")
 .First(n => n.Id == "mp-tfa")
 .Descendants("p").FirstOrDefault();



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