C # HtmlAgilityPack은 LoadHtml 함수 뒤에 tbody 요소를 원래 HTML 문서에 존재하지 않더라도 테이블의 DOM 트리에 추가합니다. 이 기능을 어떻게 비활성화 할 수 있습니까?
내 알고리즘은 dom 트리를 탐색하여 일부 XPATH 표현식을 생성하고 원본 문서 내에 존재하지 않는 tbody 요소가 SelectNodes에서 원하는 항목을 찾지 못하게 만듭니다. 이것을 알아 내는데 많은 시간을 보냈습니다. |
SelectNodes가 HtmlAgilityPack에 의해 추가 된 노드를 고려하도록 할 수 있습니까?
예:
<table>
<tr><td>data</td></tr>
</table>
내 응용 프로그램은 '데이터'를 추출하기 위해이 XPATH를 생성합니다. // table / tbody / tr / td
표현의 tbody 태그는 HtmlAgilityPack이 htmlAgilityPack에 의해 html 코드를 파싱 한 후 DOM 트리에 존재하기 때문에 HtmlAgilityPack이 추가했기 때문에 추가되었습니다. 그것 덕분에
doc.DocumentNode.SelectNodes("//table/tbody/tr/td");
실패 할 것이다.
즉, tr 요소 (HtmlElement) 부모 TagName은 'TABLE'이 아닌 'TBODY'와 같습니다. 또한 나는 많은 다른 웹 사이트들을 파싱 할 것이므로 이것은 하나의 상황이다.
SelectNodes는 HtmlDocument.LoadHtml 이후에있는 DOM 트리가 아닌 원래 HTML 코드에서 검색하거나 'virtual'요소가 추가 된 것을 고려하지 않습니다.
전체 계층 구조를 사용할 필요는 없습니다.
원하는 모든 것이 td
경우 다음을 사용하십시오.
doc.DocumentNode.SelectNodes("//table//td");
또는 tbody
노드를 무시하고 관심있는 모든 계층 구조를 가져옵니다.
doc.DocumentNode.SelectNodes("//table//tr/td");