Html Agility Pack, SelectNodes à partir d'un noeud
Pourquoi ce prendre tous mes <li>
éléments 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 est d'obtenir toutes les <li>
éléments dans le <div>
avec un id
de "mes voyages".
source d'informationauteur thatsIT | 2012-05-14
Vous devez vous connecter pour publier un commentaire.
C'est un peu déroutant parce que vous attendez qu'il ferait une selectNodes uniquement sur le div avec l'id "mes voyages", cependant si vous faites d'autres SelectNodes("//li") performn une autre recherche à partir du début du document.
J'ai fixé ce, en combinant la déclaration en un seul, mais qui ne fonctionne que sur une page web où vous avez seulement un div avec un id "mes voyages". La requête devrait ressembler à ceci:
Notez le point dans la deuxième ligne. Fondamentalement, à cet égard HTMLAgitilityPack complètement s'appuie sur la syntaxe XPath, cependant, le résultat est non-intuitif, car ces requêtes sont effectivement les mêmes:
La création d'un nouveau nœud peut être bénéfique dans certaines situations et vous permet d'utiliser les requêtes xpath de manière plus intuitive. J'ai trouvé ce utile dans quelques endroits.
Vous pouvez le faire avec une requête Linq:
J'espère que cela aide
Cela semble contre-intuitif pour moi aussi, si vous exécutez une méthode selectNodes sur un nœud particulier j'ai pensé qu'il serait seulement à la recherche pour des trucs en dessous de ce nœud, pas dans le document en général.
De toute façon, OP si vous modifiez cette ligne :
var liOfTravels = doc.DocumentNode.SelectSingleNode("//div[@id='mes voyages']").SelectNodes("//li");
:
var liOfTravels = doc.DocumentNode.SelectSingleNode("//div[@id='mes voyages']").SelectNodes("li");
Je pense que vous serez ok, j'ai juste eu le même problème et qu'il fixe pour moi. Je ne sais pas si la li devrait être un enfant direct du nœud que vous avez.