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合法嗎? 是的,了解原因