13

HtmlAgilityPack を使用して、次のように宣言された div 内に含まれるページからすべてのリンクを取得しようとしていますが、<div class='content'>以下のコードを使用すると、ページ全体のすべてのリンクを取得するだけです。以前に選択したサブノードから 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);
}

これは予想される動作ですか?もしそうなら、どうすれば私が期待していることをすることができますか?

4

1 に答える 1

21

これはうまくいきます:

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

また、単一のセレクターで実行できます。

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

また、link.Valueは に対して定義されてHtmlNodeいないため、コードはコンパイルされないことに注意してください。

于 2010-05-20T17:43:15.807 に答える