Comment saisir des éléments par classe ou id dans HTML Source en C #?

c# html html-agility-pack parsing

Question

J'essaie de récupérer des éléments à partir d'une source HTML en fonction du nom de la classe ou de l'ID, à l'aide de l'application de formulaires Windows C #. Je mets le source dans une chaîne à l'aide de WebClient et le branche au HTMLAgilityPack à l'aide de HtmlDocument.

Cependant, tous les exemples que je trouve avec le pack HTMLAgilityPack analysent et trouvent des éléments basés sur des balises. J'ai besoin de trouver un identifiant spécifique, par exemple un lien dans le code HTML, et de récupérer la valeur à l'intérieur des balises. Est-ce possible et quel serait le moyen le plus efficace de le faire? Tout ce que j'essaie d'analyser les identifiants me donne des exceptions. Merci!

Réponse acceptée

Vous devriez pouvoir faire cela avec XPath:

HtmlDocument doc = new HtmlDocument();
doc.Load(@"file.htm");

HtmlNode node = doc.DocumentNode.SelectSingleNode("//*[@id=\"my_control_id\"]");
string value = (node == null) ? "Error, id not found" : node.InnerHtml;

Explication rapide du xpath ici:

  • // signifie une recherche partout dans le chemin, utilisez SelectNodes si elle correspond à des multiples
  • * signifie correspondre à n'importe quel type de noeud
  • [] définit des "prédicats" qui vérifient essentiellement les propriétés relatives à ce nœud
  • [@id=\"my_control_id\"] signifie que les noeuds ayant un attribut nommé "id" avec la valeur "my_control_id"

Référence supplémentaire




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