C# HTMLAgilityPack 计算第一个 table 的 tr 个元素

C# HTMLAgilityPack count tr elements of first table

我已经多次使用 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]");

然后,我想统计第一个table内的元素。

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

结果总是 8 而不是 4。

请帮忙:/

非常感谢。

1) 如果要获取特定节点的子节点,请不要在 XPath 中使用 //。使用 .// 代替。不要在 XPath 中的子节点前加上 //:

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

您对 tr 标签的查询不正确。您以双斜杠开头,这意味着该查询将在整个文档上执行。如果您需要查询子节点,则需要从查询中删除双斜杠

node.SelectNodes("tbody//tr")

此外,您只需一行代码即可获得所需的计数

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