C # HTMLAgilityPack count tr элементов первой таблицы

c# html-agility-pack

Вопрос

Я использую HTMLAgilityPack несколько раз. Но у меня нет решения для моей следующей проблемы:

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

Итак, это HTML-код.

Я могу найти первый «tableClass» следующим образом:

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

Затем я хочу подсчитать элементы в первой таблице.

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

Результат всегда равен 8 вместо 4.

Пожалуйста помоги :/

Большое спасибо.

Принятый ответ

1) Не используйте // в вашем XPath, если вы хотите получить субноды определенного узла. используйте .// вместо этого. не предшествуйте subnode в XPath с // :

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

Популярные ответы

Ваш запрос для tr тегов не является правильным. Вы начинаете с двойных слэшей, что означает, что запрос будет выполнен на весь документ. Если вам нужно запрашивать подносы, вам нужно удалить эту двойную косую черту из запроса

node.SelectNodes("tbody//tr")

Кроме того, вы можете получить счет, который вам нужен, всего за одну строку кода

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


Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему