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

时间:2010-05-20 15:38:42

标签: 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);
}

这是预期的行为吗?如果是这样,我如何让它做我期待的事情呢?

1 个答案:

答案 0 :(得分:19)

这将有效:

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

此外,您可以在单个选择器中执行此操作:

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

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