Sélectionnez uniquement les éléments d'une DIV spécifique en utilisant HtmlAgilityPack

c# html-agility-pack

Question

J'essaie d'utiliser HtmlAgilityPack pour extraire tous les liens d'une page qui sont contenus dans un div déclaré comme <div class='content'> Cependant, lorsque j'utilise le code ci-dessous, j'obtiens simplement TOUS les liens de la page entière. . Cela n'a pas vraiment de sens pour moi puisque j'appelle SelectNodes à partir du sous-nœud que j'ai sélectionné précédemment (qui, lorsqu'il est affiché dans le débogueur, affiche uniquement le code HTML de cette division spécifique). Donc, c'est comme si on retournait au nœud racine même chaque fois que j'appelle SelectNodes. Le code que j'utilise est ci-dessous:

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

Est-ce le comportement attendu? Et si oui, comment puis-je le faire faire ce que j'attends?

Réponse acceptée

Cela fonctionnera:

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

En outre, vous pouvez le faire dans un seul sélecteur:

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

Notez également que link.Value n'est pas défini pour HtmlNode , votre code ne se compile donc pas.




Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi