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
코드가 컴파일되지 않도록.