C # HTMLAgilityPack conta gli elementi tr della prima tabella

c# html-agility-pack

Domanda

Sto utilizzando HTMLAgilityPack per diverse volte. Ma non ho alcuna soluzione per il mio seguente 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>

Quindi, questo è il codice HTML.

Posso trovare il primo "tableClass" di questo:

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

Quindi, voglio contare gli elementi all'interno della prima tabella.

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

Il risultato è sempre 8 invece di 4.

Per favore aiuto :/

Grazie mille.

Risposta accettata

1) Non utilizzare // in XPath se si desidera ottenere sottonodi di un nodo specifico. usa invece .// . non precedere un sottonodo nel tuo XPath con // :

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

Risposta popolare

La tua query per i tag tr non è corretta. Lo stai iniziando con doppie barre, il che significa che la query verrà eseguita su tutto il documento. Se è necessario interrogare i sottonodi, è necessario rimuovere le doppie barre dalla query

node.SelectNodes("tbody//tr")

Inoltre, è possibile ottenere il conteggio necessario per una sola riga di codice

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


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é