使用HTMLAgilityPack單獨選擇HTML選項值

c# html-agility-pack

我正在嘗試將選項列表的值作為單個項目,但此代碼只是將整個列表抓取到一個元素中。這是我正在使用的代碼:

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

會發生什麼是chapterTitles中的第一個元素具有整個選項值集,而不是(例如),列表中有12個不同的條目對應於具有12個值的選項列表。

這是我要解析的HTML片段:

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

有什麼建議麼?

一般承認的答案

HtmlAgilityPack似乎不能很好地解析該代碼。例如,代碼

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

應該真的

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

那麼,我建議你解析的是做了以下事情:

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

主要有兩點不同:

  1. 我刪除了HtmlNode.ElementsFlags.Remove("option");
  2. 文本位於option節點旁邊的節點中(而不是內部);



許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因