HtmlAgilityPack 중첩 테이블 건너 뛰기 또는 제거

html-agility-pack

문제

HtmlAgilityPack을 사용하여 다음 html을 검색합니다 (중첩 테이블에 주목하십시오).

<table class="123">
<tr>
    <table class="789">
    <tr>
        <td>abc</td>
    </tr>
    <tr>
        <td>def</td>
    </tr>
    </table>
</tr>

<tr>
    <td>info 1</td>
</tr>

<tr>
    <td>info 2</td>
</tr>

<tr>
    <td>info 3</td>
</tr>
</table>

이제 부모 테이블에서 정보를 얻는 영리한 방법과 중첩 테이블의 정보를 얻으려고합니다.

지금까지 나는 다음과 같은 것을 가지고있다.

<table class="123">
<tr>
    <table class="789">
    <tr>
        <td>abc</td>
    </tr>
    <tr>
        <td>def</td>
    </tr>
    </table>
</tr>

<tr>
    <td>info 1</td>
</tr>

<tr>
    <td>info 2</td>
</tr>

<tr>
    <td>info 3</td>
</tr>
</table>

이제 nestedTable을 가지고 놀고 내가 원하는 것을 얻을 수 있습니다 (abc, def) ...

하지만 부모 테이블에서 <tr> 을 얻으려고 할 때 :

<table class="123">
<tr>
    <table class="789">
    <tr>
        <td>abc</td>
    </tr>
    <tr>
        <td>def</td>
    </tr>
    </table>
</tr>

<tr>
    <td>info 1</td>
</tr>

<tr>
    <td>info 2</td>
</tr>

<tr>
    <td>info 3</td>
</tr>
</table>

그것은 (컬렉션에) 중첩 된 테이블에서뿐만 아니라 <tr> â €를 포함하는 것 ...

즉, 위의 html 코드에 따르면, 나는 4 <tr> 의 컬렉션을 갖기를 기대했지만, 중첩 된 테이블의 <tr> 포함하고 있기 때문에, 6 <tr> 모음.

어떻게하면 중첩 된 테이블을 유지하기 위해 발생하는 첫 번째 <tr>건너 뛸 수있어서 원하는 정보를 얻을 수 있습니다 (info1, info2, info3) (Iâ € ™ m making senseâ € |)

미리 감사드립니다!

수락 된 답변

// 는 "모든 노드 및 하위 노드 검사"를 의미하는 XPATH 식입니다. 그래서 //tr 은 루트 아래에 모든 //tr 가져옵니다.

parentTable.SelectNodes("tr") (또는 "./tr" 와 동등 함)를 수행하면 루트 아래에있는 모든 TR을 선택하게됩니다.

첫 번째 항목을 건너 뛰려면 요소의 position() 에 XPATH 필터를 추가하면됩니다 (XPATH 함수).

var parentTableRows = parentTable.SelectNodes("tr[position() > 1]");



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