Impossible pour XPATH de fonctionner avec Html Agility Pack

.net c# html-agility-pack xpath

Question

J'essaie de gratter "l'article vedette du jour" sur Wikipedia en obtenant la valeur XPATH en utilisant firebug.

entrez la description de l'image ici

Et puis le coller dans mon code:

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

Cependant, FeatureArticle renvoie toujours la valeur null. Qu'est-ce que je fais mal?

Réponse populaire

Parce que Firebug montre que XPath comme Firefox a créé le code HTML, il se peut que ce ne soit pas ce que le code HTML du serveur est. En outre, le chemin de Firebug est absolu et chaque petit changement peut le casser.

Et le moyen le plus simple est de simplement regarder le code HTML, le p-tag que vous recherchez se trouve dans une div avec id mp-tfa , il est donc plus facile de demander à XPath de rechercher la div et d’obtenir le premier p à l'intérieur.

Comme ça:

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

Le meilleur endroit pour apprendre à utiliser XPath est w3schools.com .

Vous pouvez aussi utiliser Linq, bien que XPath soit un peu plus clair.

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


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