2017-05-03 1 views
0

J'utilise HTMLAgilityPack plusieurs fois. Mais j'ai pas de solution pour mon problème suivant:C# HTMLAgilityPack compte les éléments tr de la première table

<table class="tableClass"> 
    <thead>...</thead> 
    <tbody> 
    <tr>...</tr> 
    <tr>...</tr> 
    <tr>...</tr> 
    <tr>...</tr> 
    </tbody> 
</table> 

<table class="tableClass"> 
    <thead>...</thead> 
    <tbody> 
    <tr>...</tr> 
    <tr>...</tr> 
    <tr>...</tr> 
    <tr>...</tr> 
    </tbody> 
</table> 

Alors, voici le code HTML.

je peux trouver le premier « TableClass » par ceci:

HtmlNode node= htmlDoc.DocumentNode.SelectSingleNode("//table[@class='tableClass'][1]"); 

Ensuite, je veux compter les éléments dans la première table.

foreach (HtmlNode tableRow in node.SelectNodes("//tbody//tr")) 
{ 
    size = size + 1; 
} 

Le résultat est toujours 8 au lieu de 4.

S'il vous plaît aider:/

Merci beaucoup.

Répondre

0

1) N'utilisez pas // dans votre XPath si vous souhaitez obtenir des sous-noeuds d'un noeud spécifique. utilisez .// à la place. ne précède pas un sous-noeud dans votre XPath avec //:

var trNodes=node.SelectNodes(".//tr"); 
1

Votre requête pour les tr balises n'est pas correct. Vous le lancez avec des doubles barres obliques, ce qui signifie que cette requête sera exécutée sur l'ensemble du document. Si vous avez besoin d'interroger les sous-nœuds, vous devez supprimer cette double barre oblique de votre requête

node.SelectNodes("tbody//tr") 

En outre, vous pouvez obtenir vous compter nécessaire par une seule ligne de code

htmlDoc.DocumentNode.SelectNodes("//table[@class='tableClass'][1]//tbody//tr").Count 
+0

Merci! Cela a fonctionné pour moi: node.SelectNodes ("tbody // tr"). Votre deuxième suggestion ne fonctionne pas. Le résultat est 8 aussi. – Giovanni19

+0

Ca marche, je viens de le tester sur le html à partir de ta question –

0

Il est possible, obtenir tous les éléments TR et le contenu correspondant? J'aime:

for(int x = 1; x <= 4; x++) 
{ 
    var row = htmlDoc.DocumentNode.SelectSingleNode("//table[@class='tableCLass'][1]//tbody/tr[x]"); 
    Console.WriteLine(row.toString()); 
}