C#HTML Agility Pack(非/错)迭代节点集合

c# collections foreach html-agility-pack

我正在使用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来获取带有class="row'的包含div ,想要获取URL我总是得到第一个URL。

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));
}

我用这段代码玩了一下,有一段时间我觉得我工作了。但现在我无法使用第二个代码片段选择我想要的所有网址。你能帮我吗?

一般承认的答案

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

只需将第二个字符串更改为".//div[@class='name']/a"




许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因