我正在使用HtmlAgilityPack尝试查找HTML'A'节点,这些节点的href属性包含某个字符串,在我的例子中是字符串'/ groups /':
HtmlNodeCollection groups = source.DocumentNode.SelectNodes("//a[contains(@href, '/groups/')]");
虽然源代码包含大约20个这样的节点,但上面的代码却没有返回,这让我相信也许我做错了。
我正在做的是否正确,如果不是,我如何选择具有某个属性值包含某个字符串的节点?
答案 0 :(得分:0)
对我来说,你的表达似乎是正确的。
您不发布源文档(或至少部分文档)。所以,我猜测。
问题是,对于不区分大小写的比较,xpath并不酷。如果您的<a>
标记包含href
属性,则包含以下内容: /Groups/
或/GROUPS/
,它将无法匹配。这有一个workaround:
//a[contains(translate(@href, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), '/groups/')]
作为另一种选择,您可以将LINQ与StringComparison.OrdinalIgnoreCase
:
source.DocumentNode.Descendants("a")
.Where(a => a.GetAttributeValue("href", string.Empty)
.IndexOf("/groups/", StringComparison.OrdinalIgnoreCase) != -1
);