XPath HTML查找节点

时间:2013-03-01 00:17:40

标签: xpath html-agility-pack

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

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

虽然源代码包含大约20个这样的节点,但上面的代码却没有返回,这让我相信也许我做错了。

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

1 个答案:

答案 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
);