使用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 ,讓您的代碼不編譯。



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