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:

<SELECT id=chap_select title="Chapter Navigation" Name=chapter onChange="self.location = '/s/5231611/'+ this.options[this.selectedIndex].value + '/Behind-Enemy-Lines-I-Light-Hammer';"><option  value=1 selected>1. Prologue<option  value=2 >2. Chapter One<option  value=3 >3. Chapter Two<option  value=4 >4. Chapter Three<option  value=5 >5. Chapter Four<option  value=6 >6. Chapter Five<option  value=7 >7. Chapter Six<option  value=8 >8. Chapter Seven<option  value=9 >9. Chapter Eight<option  value=10 >10. Chapter Nine<option  value=11 >11. Chapter Ten<option  value=12 >12. Chapter Eleven</select>

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>
<option value="4">...

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

var doc = .. //Load the HTML code here.
foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//select[@id='chap_select']/option")) {
    chapterTitles.Add(node.NextSibling.InnerText);
}

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