You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用SelectNodes排除指定类?HtmlAgilityPack XPath报错求助

解决HtmlAgilityPack筛选不带指定类的<tr>元素问题

你碰到的这个XPath错误,根源是not()函数的用法不对——它只能接受单个条件参数,你写成not(@class, 'group-head')这种传两个参数的方式,XPath解析器肯定不认啦。

下面给你两种靠谱的解决方案,根据你的实际场景选:

1. 简单场景(<tr>只有单个类)

如果目标表格里的<tr>要么只有group-head类,要么没有这个类(不会出现多个类的情况),直接用这个XPath就行:

HtmlNodeCollection rows = doc.GetElementById("page_player_1_block_player_trophies_5")
    .SelectNodes(".//tr[not(@class='group-head')]");

这里用.//tr而不是//tr是为了限定只在目标表格内部查找,避免误匹配页面上其他表格的行。

2. 严谨场景(<tr>可能有多个类)

要是你的<tr>可能同时有多个类(比如<tr class="group-head trophy-row">),上面的简单写法就会失效,因为@class的值是完整的字符串。这时候得用更严谨的匹配方式,确保只排除包含group-head这个完整类名的行:

HtmlNodeCollection rows = doc.GetElementById("page_player_1_block_player_trophies_5")
    .SelectNodes(".//tr[not(contains(concat(' ', @class, ' '), ' group-head '))]");

原理是把@class的值前后加上空格,再用contains()匹配带空格包裹的group-head,这样就能避免部分匹配(比如类名是group-head-extra这种情况)。

另外提醒一下,调用SelectNodes()后最好先判断返回的rows是否为null,避免空引用异常哦~

内容的提问来源于stack exchange,提问作者cojac

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:30:14