C# HtmlAlityPack-检测空白表?

C# HtmlAlityPack-检测空白表?,c#,html-agility-pack,C#,Html Agility Pack,我正在使用c和htmlagilitypack。除了我要查找的表不包含任何行之外,其他一切都正常。我试图只读取页面上第一个表中的数据。问题是,如果第一个表不包含行,HtmlAlityPack出于某种原因似乎会跳到第二个表 我试图阅读的html如下所示: <table class='stats'> <tr> <td colspan='2'>This is the 1st table</td> <tr>

我正在使用c和htmlagilitypack。除了我要查找的表不包含任何行之外,其他一切都正常。我试图只读取页面上第一个表中的数据。问题是,如果第一个表不包含行,HtmlAlityPack出于某种原因似乎会跳到第二个表

我试图阅读的html如下所示:

<table class='stats'>
    <tr>
      <td colspan='2'>This is the 1st table</td>
    <tr>
      <td>Column A</td>
      <td>Column B</td>
    </tr>
    <tr>
      <td>Value A</td>
      <td>Value B</td>
    </tr>
</table>

<table class='stats'>
    <tr>
      <td colspan='2'>This is the 2nd table</td>
    <tr>
      <td>Column 1</td>
      <td>Column 2</td>
    </tr>
    <tr>
      <td>Value 111</td>
      <td>Value 222</td>
    </tr>
</table>
如何确保我获取的数据仅来自第一个表


谢谢。

您需要在表或行上有一个唯一标识该表的id,然后在xpath中使用该id。

您可以通过在表选择器之后使用位置索引[1]确保只选择第一个匹配表

请尝试以下操作:

"//table[@class='stats'][1]/tr[position()>2]/td"
var elements = root.SelectNodes("//table[@class='stats'][1]/tr[position()>2]/td");
if (elements != null)
{
  foreach (HtmlNode node in elements)
  {
    // process the td node
  }
}
如果第一个表没有行,那么您将返回null,因此您应该在foreach中迭代之前检查它

例如,您可能希望执行以下操作:

"//table[@class='stats'][1]/tr[position()>2]/td"
var elements = root.SelectNodes("//table[@class='stats'][1]/tr[position()>2]/td");
if (elements != null)
{
  foreach (HtmlNode node in elements)
  {
    // process the td node
  }
}

是的,我认为我的问题似乎是因为我正在读取的表没有与其关联的id。我尝试运行了一些测试,并意识到当我指定[@class='stats']/tr[position>2]时,它将返回每个表的第2行之后的所有stats类表的所有行。因此,我的原始示例返回两行值A |值B…和值111 |值222。如果表1中没有行,它只返回值111 |值222。它似乎不在乎它来自哪张桌子@克里斯Taylor@goalie35为什么我被否决了?我认为你发表的评论是错误的,因为你的评论是针对Chirs Taylor的。我道歉。这一次已经有一段时间了,但我看不出为什么这一次应该被否决。也许是错了,谢谢你的回复。不幸的是,这不起作用。这似乎是一个没有指定表id的问题。您能提供一个示例HTML来说明这个问题吗?我使用您问题中的示例进行了测试,并从第一个表中删除了s,SelectNodes为null,这是我理解您需要的。实际代码长于此处允许的字符总数,因此我正在尝试阅读此页面。这是第一张有class='statstable'的桌子,大约在页面的一半。第一个名为“季节统计”的表包含2个标题行,但没有数据行,这就是我遇到问题的地方。我需要能够确定何时不存在数据行:再次感谢。@user1070194,我已经快速查看了您提供的URL,我能说的是HTML是非常有害的!找不到合适的xpath查询的原因是,HAP似乎与所有相互嵌套且没有结束标记的和混淆了。IE开发者工具栏和FireBug都对生成的DOM进行了不同的解释,尽管它呈现的很好。