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:

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

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

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

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

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