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"))
如何确保我获取的数据仅来自第一张表?
谢谢。
通过在表选择器后面使用位置索引[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。