Seleziona solo gli elementi in un DIV specifico utilizzando HtmlAgilityPack

c# html-agility-pack

Domanda

Sto cercando di usare HtmlAgilityPack per estrarre tutti i link da una pagina che sono contenuti in un div dichiarato come <div class='content'> Tuttavia, quando uso il codice qui sotto ho semplicemente ottenuto TUTTI i link sull'intera pagina . Questo non ha senso per me dal momento che sto chiamando SelectNodes dal sub-nodo che ho selezionato in precedenza (che quando visualizzato nel debugger mostra solo l'HTML da quel div specifico). Quindi, è come se tornasse al nodo root ogni volta che chiamo SelectNodes. Il codice che uso è qui sotto:

HtmlWeb hw = new HtmlWeb();
HtmlDocument doc = hw.Load(@"http://example.com");
HtmlNode node = doc.DocumentNode.SelectSingleNode("//div[@class='content']");
foreach(HtmlNode link in node.SelectNodes("//a[@href]"))
{
    Console.WriteLine(link.Value);
}

È questo il comportamento previsto? E se sì, come faccio a fare ciò che mi aspetto?

Risposta accettata

Questo funzionerà:

node.SelectNodes("a[@href]")

Inoltre, puoi farlo in un singolo selettore:

doc.DocumentNode.SelectSingleNode("//div[@class='content']//a[@href]")

Inoltre, nota che link.Value non è definito per HtmlNode , quindi il tuo codice non viene compilato.



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é