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

时间:2017-05-03 11:21:00

标签: 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。

请帮忙:/

非常感谢。

2 个答案:

答案 0 :(得分:1)

您对tr代码的查询不正确。您正在使用双斜杠启动它,这意味着该查询将在整个文档上执行。如果需要查询子节点,则需要从查询中删除该双斜杠

node.SelectNodes("tbody//tr")

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

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

答案 1 :(得分:0)

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

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