0

我正在使用 HtmlAgilityPack 尝试查找具有包含特定字符串的 href 属性的 HTML 'A' 节点,在我的例子中是字符串'/groups/':

HtmlNodeCollection groups = source.DocumentNode.SelectNodes("//a[contains(@href, '/groups/')]");

尽管源代码包含大约 20 个这样的节点,但我上面的代码没有返回任何内容,这让我相信我可能做错了。

我所做的是否正确,如果不是,我如何选择具有某个属性的节点,该属性的值包含某个字符串?

4

1 回答 1

0

你的表达对我来说似乎是正确的。

您不会发布您的源文档(或至少是其中的一部分)。所以,我会猜的。

问题是,xpath 对于不区分大小写的比较并不酷。如果您的<a>标签的 href属性包含 eg/Groups//GROUPS/,则不会匹配。有一个解决方法

//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
);
于 2013-03-01T08:23:18.237 回答