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语法,但结果是不直观的,因为这些查询实际上是相同的:

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


Related

许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow