HtmlAgilityPack ignorer ou supprimer une table imbriquée

html-agility-pack

Question

J'utilise HtmlAgilityPack afin de récupérer le code HTML suivant (remarquez le tableau imbriqué):

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

Maintenant, j'essaie de trouver un moyen intelligent d'obtenir des informations à partir de la table parent et des informations à partir de la table imbriquée…

Jusqu'à présent, j'ai les éléments suivants:

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

Je peux maintenant jouer avec la table imbriquée et obtenir ce que je veux (abc, def) ...

Mais quand j'essaie d'obtenir les <tr> â € ¢ de la table parente, comme ceci:

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

Il semble inclure (dans la collection) les éléments <tr> de la table imbriquée également ...

En d'autres termes, selon le code html ci-dessus, je m'attendais à avoir une collection de 4 <tr> mais comme il inclut les <tr> de la table imbriquée, je reçois un collection de 6 <tr> â €

Comment puis-je ignorer le premier <tr> qui contient la table imbriquée pour pouvoir jouer et obtenir les informations souhaitées (info1, info2, info3) (j'espère que j'ai du sens ...)

Merci d'avance!

Réponse acceptée

// est une expression XPATH qui signifie "analyser tous les nœuds et sous-nœuds". C'est pourquoi //tr obtient tous les tr sous la racine.

Si vous ne faites que parentTable.SelectNodes("tr") (ou "./tr" qui est équivalent), vous sélectionnerez tous les TR situés en dessous de la racine.

Si vous voulez ignorer le premier, vous pouvez ajouter un filtre XPATH sur la position() l'élément position() (une fonction XPATH):

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



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi