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?
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:
HtmlNode.ElementsFlags.Remove("option");
option
(statt innerhalb);