HTMLAgilityPack-检测空白表

本文关键字:空白 检测 HTMLAgilityPack- | 更新日期: 2023-09-27 18:23:52

我使用的是带有htmlagilitypack的c#。除了我要查找的表不包含行之外,其他一切都很好。我试图只读取页面上第一个表中的数据。问题是,如果第一个表不包含行,则由于某种原因,htmlagilitypack似乎会跳到第二个表。

我试图阅读的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>

然后,我使用以下行检索第一个表的值:

foreach (HtmlNode node in root.SelectNodes("//table[@class='stats']/tr[position() > 2]/td"))

如何确保我获取的数据仅来自第一张表?

谢谢。

HTMLAgilityPack-检测空白表

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

尝试以下操作:

"//table[@class='stats'][1]/tr[position()>2]/td"

如果第一个表没有行,那么您将返回null,因此在foreach中迭代之前应该检查它。

例如,您可能想要执行以下操作:

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,然后在xpath中使用该id。