Warum wählt dies alle meine <li>
Elemente in meinem Dokument aus?
HtmlWeb web = new HtmlWeb();
HtmlDocument doc = web.Load(url);
var travelList = new List<Page>();
var liOfTravels = doc.DocumentNode.SelectSingleNode("//div[@id='myTrips']")
.SelectNodes("//li");
Ich möchte alle <li>
-Elemente in <div>
mit der id
"myTrips" erhalten.
Es ist ein wenig verwirrend, weil Sie erwarten, dass es ein selectNodes nur für das div mit der ID "myTrips" ausführen würde. Wenn Sie jedoch ein anderes SelectNodes ("// li") ausführen, führt es eine weitere Suche am Anfang des Dokuments aus.
Ich habe dies behoben, indem ich die Anweisung in eine zusammengefasst habe, aber das funktioniert nur auf einer Webseite, auf der Sie nur ein div mit einer ID "mytrips" haben. Die Abfrage würde so aussehen:
doc.DocumentNode.SelectNodes ("// div [@ id = 'myTrips'] // li");
var liOfTravels = doc.DocumentNode.SelectSingleNode("//div[@id='myTrips']")
.SelectNodes(".//li");
Notieren Sie den Punkt in der zweiten Zeile. Grundsätzlich verlässt sich HTMLAgitiabilityPack in dieser Hinsicht vollständig auf die XPath-Syntax. Das Ergebnis ist jedoch nicht intuitiv, da diese Abfragen im Grunde die gleichen sind:
doc.DocumentNode.SelectNodes("//li");
some_deeper_node.SelectNodes("//li");