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 세그먼트입니다.

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

어떤 제안?

수락 된 답변

HtmlAgilityPack은 그 코드를 정말 잘 해석하지 못하는 것 같습니다. 예를 들어, 코드

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

정말로 있어야한다.

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

그래서, 내가 당신에게 다음과 같은 것을하는 것을 제안하는 것을 제안합니다 :

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

주요 차이점 두 가지 :

  1. HtmlNode.ElementsFlags.Remove("option"); 삭제 HtmlNode.ElementsFlags.Remove("option");
  2. 텍스트는 내부 대신에 option 노드 옆에있는 노드에서 찾을 수 있습니다.


아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.