HTMLAgility Pack이 닫히지 않은 태그를 남길 수 있습니까?

c# html-agility-pack

문제

다음과 같이 HTML 문자열을 파싱해야합니다.

<widget attribute="1">
  <header>
    <table>
  </header>
  <item>
    <tr><td>content</td></tr>
  </item>
  <footer>
    </table>
  </footer>
</widget>

저는 HTML Agility Pack을 사용하고 있으며 모든 "위젯"을 찾을 수 있습니다 :

<widget attribute="1">
  <header>
    <table>
  </header>
  <item>
    <tr><td>content</td></tr>
  </item>
  <footer>
    </table>
  </footer>
</widget>

내 문제는 위젯 노드의 모든 자식 노드를 가져 오려고 할 때입니다. HTMLAgility가 자동으로 모든 태그를 닫음으로써 헤더, 항목 및 꼬리말 노드를 올바르게 검색 할 수 없습니다. 민첩성에 의해 생성 된 결과는 다음과 같습니다.

<widget attribute="1">
  <header>
    <table>
  </header>
  <item>
    <tr><td>content</td></tr>
  </item>
  <footer>
    </table>
  </footer>
</widget>

헤더의 표 태그를 닫고 바닥 글에 표 태그를 숨 깁니다. 이 태그를 닫지 않은 상태로 두는 방법이 있습니까? LoadHtml 메서드의 논리에 대한 설명서를 검색하려고했지만 아무 것도 찾지 못했습니다. 나는 옵션과 함께해야한다고 생각해.

나 좀 도와 줄 수있어?

인기 답변

Html 민첩성 팩은 일반적으로 디자인 상 중복 태그를 지원하지 않습니다. 그러나 다음과 같이 수정할 수 있습니다.

HtmlDocument doc = new HtmlDocument();
HtmlNode.ElementsFlags.Add("table", HtmlElementFlag.CanOverlap | HtmlElementFlag.Empty);
doc.LoadHtml(htmlString); 

이 경우 라이브러리가 TABLE을 겹치는 태그로 처리하도록 지시합니다. 부수적으로, FORM은 기본적으로 중복 태그로 정의 된 유일한 태그입니다 (이유는 여기를 참조하십시오 : HtmlAgilityPack - <form> 자체가 어떤 이유로 닫힙니까? ).

그러나 이것은 무료 점심 식사로 제공되지 않습니다 ...

즉, 라이브러리는 이제 테이블 및 닫기 테이블 태그의 내용을 순수 텍스트 요소로 보게됩니다. 따라서 구문 분석 된 테이블 안의 모든 태그는 프로그래밍 방식으로 액세스 할 수 없으므로 DOM에서는 표시되지 않으며 XPATH 등을 사용하여 표시되지는 않지만 원하는만큼 충분할 수 있습니다.




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