Paquete de agilidad HTML de C # (no / incorrecto) iterando sobre la colección de nodos

c# collections foreach html-agility-pack

Pregunta

Estoy usando HTML Agility Pack para obtener las URL de w página web. La URL es:

http://goo.gl/DqfQl

Si uso el siguiente código, obtengo los enlaces que quiero:

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

Pero cuando cambio HtmlNodeCollection para obtener el div containg con class="row' y el deseo de obtener la URL siempre obtengo la primera 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));
}   

Jugué un poco con este código y por un tiempo pensé que trabajaba. Pero ahora no puedo usar el segundo fragmento de código, seleccione todas las URL que deseo. ¿Puede usted ayudar?

Respuesta aceptada

Tienes que añadir un punto "." a la XPath, de lo contrario, coincidirá desde el principio del documento y no dentro del nodo.

Simplemente cambie su segunda cadena a ".//div[@class='name']/a" y debería funcionar




Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué