首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Html,来自节点的SelectNodes

Html,来自节点的SelectNodes
EN

Stack Overflow用户
提问于 2012-05-14 21:05:33
回答 5查看 38.6K关注 0票数 19

为什么这会选取我文档中的所有<li>元素?

代码语言:javascript
复制
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>中的所有<li>元素,其id为"myTrips“。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-05-14 21:32:02

这有点令人困惑,因为您期望它只在id为"myTrips“的div上执行selectNodes,但是如果您执行另一个SelectNodes("//li"),它将从文档的顶部执行另一个搜索。

我通过将语句合并为一个语句修复了这个问题,但这只适用于只有一个div且id为"mytrips“的网页。查询将如下所示:

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

票数 17
EN

Stack Overflow用户

发布于 2013-01-20 20:24:27

代码语言:javascript
复制
var liOfTravels = doc.DocumentNode.SelectSingleNode("//div[@id='myTrips']")
                 .SelectNodes(".//li");

请注意第二行中的点。在这方面,HTMLAgitilityPack基本上完全依赖于XPath语法,但是结果并不直观,因为这些查询实际上是相同的:

代码语言:javascript
复制
doc.DocumentNode.SelectNodes("//li");
some_deeper_node.SelectNodes("//li");
票数 17
EN

Stack Overflow用户

发布于 2015-10-02 23:57:49

在某些情况下,创建新节点可能很有用,并使您可以更直观地使用xpath。我发现这在几个地方很有用。

代码语言:javascript
复制
var myTripsDiv = doc.DocumentNode.SelectSingleNode("//div[@id='myTrips']");
var myTripsNode = HtmlNode.CreateNode(myTripsDiv.InnerHtml);
var liOfTravels = myTripsNode.SelectNodes("//li");
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10583926

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档