C # HTML Agility Pack (нет / не прав), итерация по коллекции узлов

c# collections foreach html-agility-pack

Вопрос

im, используя HTML Agility Pack для извлечения URL-адресов с веб-страницы 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 для извлечения 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-адреса, которые я хочу. Вы можете помочь?

Принятый ответ

Вы должны добавить точку "." на XPath, иначе это будет соответствовать началу документа, а не внутри узла.

Просто измените свою вторую строку на ".//div[@class='name']/a" и она должна работать



Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему