HtmlAgilityPack salta o rimuove la tabella nidificata

html-agility-pack

Domanda

Sto usando HtmlAgilityPack per recuperare il seguente html (nota la tabella nidificata):

<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>

Ora, sto cercando di trovare un modo intelligente per ottenere alcune informazioni dalla tabella padre e alcune informazioni dalla tabella annidata ... |

Finora ho il seguente:

<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>

Ora posso giocare con il nestedTable e ottenere quello che voglio (abc, def) ...

Ma quando provo a ottenere i <tr> dalla tabella genitore in questo modo:

<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>

Sembra includere (nella raccolta) anche i <tr> dalla tabella nidificata ...

In altre parole, secondo il codice html sopra, mi aspettavo di avere una collezione di 4 <tr> ma, dato che include i <tr> dalla tabella nidificata, sto ottenendo un raccolta di 6 <tr> .

Come posso saltare il primo <tr> che succede a tenere il tavolo nidificato in modo da poter giocare e ottenere le informazioni che voglio (info1, info2, info3) (spero di avere un senso ...)

Grazie in anticipo!

Risposta accettata

// è un'espressione XPATH che significa "scansione di tutti i nodi e sottonodi". Questo è il motivo per cui //tr diventa tutto tr inferiore a quello di root.

Se si esegue parentTable.SelectNodes("tr") (o "./tr" che è equivalente), si selezionerà tutto TR sotto quello di root.

Se vuoi saltare il primo, puoi aggiungere un filtro XPATH sulla position() dell'elemento position() (una funzione XPATH):

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



Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché