c# - 使用 HtmlAgilityPack 仅选择特定 DIV 中的项目

标签 c# html-agility-pack

我正在尝试使用 HtmlAgilityPack 从页面中提取所有链接,这些链接包含在声明为 <div class='content'> 的 div 中。但是,当我使用下面的代码时,我只是获得了整个页面上的所有链接。这对我来说真的没有意义,因为我是从我之前选择的子节点调用 SelectNodes(在调试器中查看时只显示来自该特定 div 的 HTML)。所以,就像每次我调用 SelectNodes 时都回到根节点一样。我使用的代码如下:

HtmlWeb hw = new HtmlWeb();
HtmlDocument doc = hw.Load(@"http://example.com");
HtmlNode node = doc.DocumentNode.SelectSingleNode("//div[@class='content']");
foreach(HtmlNode link in node.SelectNodes("//a[@href]"))
{
    Console.WriteLine(link.Value);
}

这是预期的行为吗?如果是这样,我如何让它按照我的预期进行?

最佳答案

这会起作用:

node.SelectNodes("a[@href]")

此外,您可以在单个选择器中完成:

doc.DocumentNode.SelectSingleNode("//div[@class='content']//a[@href]")

另外,请注意 link.Value 没有为 HtmlNode 定义,因此您的代码无法编译。

关于c# - 使用 HtmlAgilityPack 仅选择特定 DIV 中的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2875347/

相关文章:

c# - MVC 4 将列表从 View 传递到 Controller

C#记事本类似文件读取

c# - 使用 CSS 内联更改 HTML 以使用数据 Url

c# - 使用 HTMLNode 的 foreach 循环中的 NullReferenceException 错误

c# - SET 如何与 C# 中的属性一起使用?

c# - 安装 Xamarin-Forms 应用程序后应用程序崩溃

c# - ASP.NET:同步客户端和服务器端验证规则

c# - 使用 html 敏捷包获取文本值

html-agility-pack - 使用 Html Agility Pack 查找和删除指定的 HTML 标签

C# 使用 xpath 解析 html