HTML-Optionswerte einzeln mit HTMLAgilityPack auswählen

c# html-agility-pack

Frage

Ich versuche, die Werte einer Optionsliste als einzelne Elemente zu erhalten, aber dieser Code erfasst stattdessen nur die gesamte Liste in einem Element. Hier ist der Code, den ich verwende:

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

Was passiert, ist das erste Element in chapterTitles hat den gesamten Satz von Optionswerten, anstatt (zum Beispiel) 12 Einträge in der Liste, die einer Optionsliste mit 12 Werten entsprechen.

Hier ist das HTML-Segment, das ich analysieren möchte:

<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>

Irgendwelche Vorschläge?

Akzeptierte Antwort

HtmlAgilityPack scheint diesen Code nicht wirklich gut zu analysieren. Zum Beispiel der Code

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

sollte wirklich sein

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

Also, was ich Ihnen vorschlagen zu analysieren, ist Folgendes:

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

Die wichtigsten zwei Unterschiede:

  1. Ich habe HtmlNode.ElementsFlags.Remove("option");
  2. Die Texte befinden sich in den Knoten, die neben den option (statt innerhalb);



Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum