Html Agility Pack, SelectNodes da un nodo

.net c# html-agility-pack

Domanda

Perché sceglie tutti i miei elementi <li> nel mio documento?

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

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

Quello che voglio è ottenere tutti gli elementi <li> nel <div> con un id di "myTrips".

Risposta accettata

È un po 'confuso perché ti aspetti che faccia un selectNodes solo sul div con id "myTrips", tuttavia se fai un altro SelectNodes ("// li") eseguirà un'altra ricerca dalla parte superiore del documento.

Ho risolto questo problema combinando l'istruzione in uno, ma ciò funzionava solo su una pagina web in cui si dispone di un solo div con un id "mytrips". La query sarebbe simile a questa:

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


Risposta popolare

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

Nota il punto nella seconda riga. Fondamentalmente in questo senso HTMLAgitilityPack si basa completamente sulla sintassi XPath, tuttavia il risultato non è intuitivo, perché quelle query sono effettivamente le stesse:

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



Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché