XPath的HTML找到节点

问题描述:

我使用HtmlAgilityPack,试图找到HTML“A”的节点有一个包含某些字符串,在我的情况下,字符串“/组/” href属性:XPath的HTML找到节点

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

虽然源代码包含大约20个这样的节点,我的代码上面没有返回,这导致我相信也许我做的不正确。

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

+0

请添加要定位的XML – JWiley 2013-03-01 03:31:01

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

您不会发布您的源文件(或至少它的一部分)。所以,我会猜测。

事情是,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 
);