C # HTML Agility Pack (non / sbagliato) che itera sulla raccolta di nodi

c# collections foreach html-agility-pack

Domanda

im utilizzando HTML Agility Pack per recuperare gli URL dalla pagina Web w. L'URL è:

http://goo.gl/DqfQl

Se uso il codice qui sotto ottengo i link che voglio:

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

Ma quando cambio HtmlNodeCollection per recuperare il div conta con class="row' e voglio recuperare l'URL ottengo sempre il primo 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));
}   

Ho giocato un po 'con questo codice e per un po' ho pensato di lavorare. Ma ora non posso usare il secondo snippet di codice selezionare tutti gli URL che voglio. Puoi aiutare?

Risposta accettata

Devi aggiungere un punto "." per l'XPath, altrimenti si combina dall'inizio del documento e non all'interno del nodo.

Basta cambiare la seconda stringa in ".//div[@class='name']/a" e dovrebbe funzionare




Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché