Sélection individuelle des valeurs d'options HTML à l'aide de HTMLAgilityPack

c# html-agility-pack

Question

J'essaie d'obtenir les valeurs d'une liste d'options sous forme d'éléments individuels, mais ce code ne fait que saisir la liste entière en un seul élément. Voici le code que j'utilise:

List<string> chapterTitles = new List<string>();
HtmlNode.ElementsFlags.Remove("option");
doc.LoadHtml(htmlContent);
foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//select[@id='chap_select']/option"))
chapterTitles.Add(node.InnerText);

Ce qui se passe est que le premier élément de chapitreTitles contient l’ensemble complet des valeurs d’option, plutôt que (par exemple), la liste comportant 12 entrées différentes correspondant à une liste d’options comportant 12 valeurs.

Voici le segment HTML que j'essaie d'analyser:

List<string> chapterTitles = new List<string>();
HtmlNode.ElementsFlags.Remove("option");
doc.LoadHtml(htmlContent);
foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//select[@id='chap_select']/option"))
chapterTitles.Add(node.InnerText);

Aucune suggestion?

Réponse acceptée

HtmlAgilityPack ne semble pas vraiment analyser ce code. Par exemple, le code

<option  value=3 >3. Chapter Two<option  value=4 >...

devrait vraiment être

<option  value=3 >3. Chapter Two<option  value=4 >...

alors, ce que je vous propose d'analyser c'est faire ce qui suit:

<option  value=3 >3. Chapter Two<option  value=4 >...

Les deux principales différences:

  1. J'ai enlevé HtmlNode.ElementsFlags.Remove("option");
  2. Les textes se trouvent dans les noeuds situés à côté des noeuds d' option (au lieu de l'intérieur);



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