Html Agility Pack, SelectNodes desde un nodo

.net c# html-agility-pack

Pregunta

¿Por qué elige esto todos mis elementos <li> en mi 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");

Lo que quiero es obtener todos los elementos <li> en <div> con un id de "myTrips".

Respuesta aceptada

Es un poco confuso porque espera que haga un SelectNodes solo en el div con id "myTrips", sin embargo, si hace otro SelectNodes ("// li"), realizará otra búsqueda desde la parte superior del documento.

Arreglé esto combinando la declaración en una, pero eso solo funcionaría en una página web donde solo tienes un div con un id "mytrips". La consulta se vería así:

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


Respuesta popular

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

Note el punto en la segunda línea. Básicamente, en este sentido, HTMLAgitilityPack se basa completamente en la sintaxis de XPath, sin embargo, el resultado no es intuitivo, porque esas consultas son efectivamente las mismas:

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


Related

Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow