C # HtmlAgilityPack tbody 추가

c# html html-agility-pack xpath

문제

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


Related

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