HTML 민첩성 팩 - 옵션 태그가 포함 된 HTML 선택 태그를 선택하는 문제

.net c# dom html-agility-pack

문제

HTML 애자 팩을 사용하여 요소를 선택하고 해당 요소와로드 된 HTML 문자열에 포함 된 모든 요소를 ​​반환합니다. 코드를 테스트 할 때 w3schools의 select 태그 예제와 비교해 보았습니다.

<select name="cars">
  <option value="volvo">Volvo XC90</option>
  <option value="saab">Saab 95</option>
  <option value="mercedes">Mercedes SLK</option>
  <option value="audi">Audi TT</option>
</select>

HTML 민첩성 팩으로 이것을 선택하여 반환하려고하면 옵션 닫기 태그가 제거됩니다.

<select name="cars">
  <option value="volvo">Volvo XC90</option>
  <option value="saab">Saab 95</option>
  <option value="mercedes">Mercedes SLK</option>
  <option value="audi">Audi TT</option>
</select>

그래서 나는 여기에서 검색을하고 라인을 추가하라는 지시를 발견했다 : HtmlNode.ElementsFlags.Remove ( "option");

내가 해냈어. 이제 옵션 텍스트가 옵션 태그 바깥으로 옮겨진다.

<select name="cars">
  <option value="volvo">Volvo XC90</option>
  <option value="saab">Saab 95</option>
  <option value="mercedes">Mercedes SLK</option>
  <option value="audi">Audi TT</option>
</select>

원본 HTML과 일치하도록 출력하고 싶습니다. 그것을 얻으려면 내가 무엇을해야합니까?

또한 입력 태그로 테스트했을 때 OptionWriteEmptyNodes를 사용하여 자신의 자체 닫기가 제거되고 그 옵션을 수정하는 것처럼 보였습니다. 나는이 문제에 영향을 미치지 않았 음을 확인하기 위해 지금 논평했다.

이것은 .NET C # 코드입니다.

<select name="cars">
  <option value="volvo">Volvo XC90</option>
  <option value="saab">Saab 95</option>
  <option value="mercedes">Mercedes SLK</option>
  <option value="audi">Audi TT</option>
</select>

수락 된 답변

옵션 태그의 ElementsFlag 필드를 설정하여 작동하게해야합니다.

HtmlNode.ElementsFlags["option"] = HtmlElementFlag.Closed;

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(html);

원래 HTML 코드를 반환해야합니다.

HtmlAgilityPack이 이런 식으로 동작하는 이유는 HTML 태그의 <option> 태그가 아이러니하게도 닫는 태그가 필요없는 선택적 태그이기 때문입니다.

HtmlNode 클래스의 문서에서 HtmlNode ElementsFlags .

특정 요소 노드에 대한 특정 동작을 정의하는 플래그 컬렉션을 가져옵니다. 이 표에는 키로 소문자 태그 이름이있는 DictionaryEntry 목록과 값으로 HtmlElementFlags가 조합되어 있습니다.

HtmlElementFlag 열거 형을 자세히 살펴보면 다음과 같이 나타납니다.

Empty - 노드가 비어 있습니다. META 또는 IMG는 이러한 노드의 예입니다. Closed - 구문 분석 중에 노드가 자동으로 닫힙니다.

HtmlNode 클래스의 소스 코드를 보면 '특정'으로 간주되는 다른 태그를 볼 수 있습니다.




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