4

我使用 HTML Agility Pack 从 w 网页获取 URL。网址是:

http://goo.gl/DqfQl

如果我使用下面的代码,我会得到我想要的链接:

String html = getHtml("http://goo.gl/DqfQl");

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();

doc.LoadHtml(html);

HtmlNodeCollection address_rows = doc.DocumentNode.SelectNodes("//div[@class='name']/a"); 

foreach (HtmlNode row in address_rows)
{
    MessageBox.Show(row.GetAttributeValue("href",LINK_NOT_FOUND));
}

但是,当我更改HtmlNodeCollection以获取包含div的内容class="row'并希望获取 URL 时,我总是得到第一个 URL。

HtmlNodeCollection address_rows = doc.DocumentNode.SelectNodes("//div[@class='row']"); 

foreach (HtmlNode element in address_rows) {
    MessageBox.Show(element.SelectSingleNode("//div[@class='name']/a").GetAttributeValue("href",LINK_NOT_FOUND));
}   

我用这段代码玩了一会儿,有一段时间我以为我工作了。但现在我无法使用第二个代码片段选择我想要的所有 URL。你能帮我吗?

4

1 回答 1

16

您必须添加一个点“。” 到 XPath,否则它将从 Document 的开头匹配,而不是在节点内部。

只需将您的第二个字符串更改为".//div[@class='name']/a"它应该可以工作

于 2012-08-08T20:50:32.510 回答