C # HTML Agility Pack (pas / mal) itérant sur la collection de nœuds

c# collections foreach html-agility-pack

Question

im utilisant HTML Agility Pack pour extraire les URL de la page Web. L'URL est:

http://goo.gl/DqfQl

Si j'utilise le code ci-dessous, je reçois les liens que je veux:

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

Mais quand je change de HtmlNodeCollection pour chercher le div containg avec class="row' et que je veux récupérer l'URL, j'obtiens toujours la première 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));
}   

J'ai joué un peu avec ce code et pendant un moment, j'ai cru travailler. Mais maintenant, je ne peux pas utiliser le deuxième extrait de code, sélectionnez toutes les URL que je veux. Pouvez vous aider?

Réponse acceptée

Vous devez ajouter un point "." XPath, sinon, elle correspondra au début du document et non à l'intérieur du nœud.

Il suffit de changer votre deuxième chaîne en ".//div[@class='name']/a" et cela devrait fonctionner



Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow