Html Agility Pack, SelectNodes à partir d'un nœud

.net c# html-agility-pack

Question

Pourquoi cela sélectionne-t-il tous mes éléments <li> dans mon document?

HtmlWeb web = new HtmlWeb();
HtmlDocument doc = web.Load(url);

var travelList = new List<Page>();
var liOfTravels = doc.DocumentNode.SelectSingleNode("//div[@id='myTrips']")
                     .SelectNodes("//li");

Ce que je veux, c'est obtenir tous les éléments <li> dans le <div> avec un id de "myTrips".

Réponse acceptée

C'est un peu déroutant car vous vous attendez à ce qu'il fasse un selectNodes uniquement sur le div portant l'id "myTrips". Toutefois, si vous faites un autre SelectNodes ("// li"), il effectuera une autre recherche à partir du haut du document.

J'ai résolu ce problème en combinant la déclaration en une seule déclaration, mais cela ne fonctionnerait que sur une page Web comportant un seul div portant l'id "mytrips". La requête ressemblerait à ceci:

doc.DocumentNode.SelectNodes ("// div [@ id = 'myTrips'] // li");


Réponse populaire

var liOfTravels = doc.DocumentNode.SelectSingleNode("//div[@id='myTrips']")
                 .SelectNodes(".//li");

Notez le point dans la deuxième ligne. À cet égard, HTMLAgitilityPack repose entièrement sur la syntaxe XPath, mais le résultat n’est pas intuitif, car ces requêtes sont en réalité les mêmes:

doc.DocumentNode.SelectNodes("//li");
some_deeper_node.SelectNodes("//li");


Related

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