Compter les lignes et les colonnes dans une table HTML comportant des sous-tables à l'aide de HtmlAgilityPack

html-agility-pack html-table vb.net

Question

J'analyse une table HTML et j'ai besoin du nombre de colonnes et de lignes.

J'ai essayé d'utiliser:

ColNum = mTables(1).SelectNodes(".//th").Count
RowNum = mTables(1).SelectNodes(".//tr").Count

Mais j'obtiens un résultat erroné si la table a une ou plusieurs sous-tables.

Voici un exemple de table html que je dois analyser:

<table border='1'>
    <tbody>
        <tr><th>Some Text</th><th>Some Text</th><th>Some Text</th></tr>
        <tr><td>Some data</td><td>Some data</td><td>Some data</td></tr>
        <tr><td>Some data</td><td>Some data
                     <table border='1'>
                         <tbody>
                             <tr><th>Some Text</th><th>Some Text</th></tr>
                             <tr><td>Some Data</td><td>Some Data</td></tr>
                         </tbody>
                     </table><td>Some data</td></tr>
        <tr><td>Some data</td><td>Some data</td><td>Some data</td></tr>
        <tr><td>Some data</td><td>Some data</td><td>Some data</td></tr>
    </tbody>
</table>

Dans cet exemple, j'ai besoin de ces résultats: Colonnes = 3 Lignes = 5

Comment obtenir le nombre de lignes et de colonnes (uniquement pour la table principale) sans compter les lignes et les colonnes de sous-tableau?

Réponse populaire

J'ai résolu de cette façon:

Pour les colonnes :

ColNum = mTables(1).SelectSingleNode(".//tbody//tr[1]").SelectNodes(".//th").Count

Pour les rangées :

Premièrement : Vérifier les sous-tables

Dim SubTbl%
Try
    SubTbl% = mTables(1).SelectNodes(".//table").Count
Catch ex As Exception
    SubTbl% = 0
End Try

Ensuite : Compter les lignes dans les sous-tables et soustraire du nombre total de lignes

Dim SubTRows% = 0
If SubTables > 0 Then
    For SubT As Short = 1 To SubTables
        Dim STRows% = mTables(1).SelectNodes(".//table[" & SubT & "]//tr").Count
        SubTRows += STRows
    Next
    RowsNum = mTables(1).SelectNodes(".//tr").Count - SubTRows
Else
    RowsNum = mTables(1).SelectNodes(".//tr").Count
End If


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