XPath的HTML找到节点
问题描述:
我使用HtmlAgilityPack,试图找到HTML“A”的节点有一个包含某些字符串,在我的情况下,字符串“/组/” href属性:XPath的HTML找到节点
HtmlNodeCollection groups = source.DocumentNode.SelectNodes("//a[contains(@href, '/groups/')]");
虽然源代码包含大约20个这样的节点,我的代码上面没有返回,这导致我相信也许我做的不正确。
我正在做的是否正确,如果不是,我该如何选择具有特定属性的节点,该节点具有包含特定字符串的值?
答
你的表情似乎对我来说是正确的。
您不会发布您的源文件(或至少它的一部分)。所以,我会猜测。
事情是,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
);
请添加要定位的XML – JWiley 2013-03-01 03:31:01