Html Agility Pack,來自節點的SelectNodes

.net c# html-agility-pack

為什麼選擇我文檔中的所有<li>元素?

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

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

我想要的是在<div> id為“myTrips”的所有<li>元素。

一般承認的答案

這有點令人困惑,因為你期望它只在id為“myTrips”的div上做一個selectNodes,但是如果你做另一個SelectNodes(“// li”),它將從文檔的頂部執行另一次搜索。

我通過將語句合併為一個來修復此問題,但這只適用於您只有一個ID為“mytrips”的div的網頁。查詢看起來像這樣:

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


熱門答案

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

注意第二行中的點。基本上在這方面,HTMLAgitilityPack完全依賴於XPath語法,但結果是不直觀的,因為這些查詢實際上是相同的:

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



許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因