C # HTMLAgilityPack cuenta tr elementos de la primera tabla

c# html-agility-pack

Pregunta

Estoy usando el HTMLAgilityPack varias veces. Pero no tengo solución para mi siguiente problema:

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

Por lo tanto, este es el código HTML.

Puedo encontrar el primer "tableClass" por esto:

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

Luego, quiero contar los elementos dentro de la primera tabla.

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

El resultado es siempre 8 en lugar de 4.

Por favor ayuda :/

Muchas gracias.

Respuesta aceptada

1) No use // en su XPath si desea obtener subnodos de un nodo específico. utilizar .// en .// lugar. no preceda un subnodo en su XPath con // :

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

Respuesta popular

Su consulta para las etiquetas tr no es correcta. Lo está iniciando con barras diagonales dobles, lo que significa que la consulta se ejecutará en todo el documento. Si necesita consultar subnodos, debe eliminar esas barras diagonales dobles de su consulta

node.SelectNodes("tbody//tr")

Además, puede obtener la cuenta que necesita con solo una línea de código

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



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué