【问题标题】:XPath HTML finding nodesXPath HTML 查找节点
【发布时间】:2013-03-01 00:17:39
【问题描述】:

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

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

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

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

【问题讨论】:

  • 请添加您要定位的xml

标签: xpath html-agility-pack


【解决方案1】:

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

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

问题是,xpath 对于不区分大小写的比较并不酷。如果您有一个带有 href 属性的 <a> 标签,其中包含例如/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
);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-11
    • 1970-01-01
    • 2011-07-24
    • 2010-10-20
    • 2014-07-25
    • 2021-04-07
    • 1970-01-01
    相关资源
    最近更新 更多