在 C# 中使用 xpath 选择具有不同类的多个 div 节点

Posted

技术标签:

【中文标题】在 C# 中使用 xpath 选择具有不同类的多个 div 节点【英文标题】:Selecting Multiple div Nodes with different class with xpath in C# 【发布时间】:2016-11-22 07:24:28 【问题描述】:

我想用 xpath 选择具有不同类的 div 节点。我该怎么办? 我写了这段代码,但它返回错误。

htmlWeb w = new HtmlWeb();
string SearchResults = "http://www.ask.com/web?q=" + query.querytxt;
var hd = w.Load(SearchResults);
var titles = hd.DocumentNode.SelectNodes("//div[contains(@class='web-result ur tsrc')] && //div[contains(@class='web-result ur tsrc_Wiki-SA '] && //div[contains(@class='web-result ur tsrc_tube youtube-result ']"); 

我需要这些 div

//div[contains(@class='web-result ur tsrc')]
//div[contains(@class='web-result ur tsrc_Wiki-SA ')]
//div[contains(@class='web-result ur tsrc_tube youtube-result ']

这是错误:

函数'contains' in '//div[contains(@class='web-result ur tsrc')] && //div[contains(@class='web-result ur tsrc_Wiki-SA '] && //div[contains(@class='web-result ur tsrc_tube youtube-result ']' 有 参数数量无效。

【问题讨论】:

【参考方案1】:

xpath contains() 函数与, 一起使用来比较值而不是=。因此,请尝试以下正确的xpath:-

//div[contains(@class, 'web-result ur tsrc')]
//div[contains(@class, 'web-result ur tsrc_Wiki-SA ')]
//div[contains(@class, 'web-result ur tsrc_tube youtube-result ')]

希望对您有所帮助...:)

【讨论】:

我在 *** 上看到了很多引用 contains() 函数的示例。他们中的大多数人告诉你多次使用 Contains() 但我无法让它们中的任何一个工作。你是第一个只调用一次并且它确实有效的!谢谢一百万。【参考方案2】:

要选择所有具有不同类名的 div(s)(节点),请直接搜索类名。

你可以这样做:

hd.DocumentNode.SelectNodes("@class='web-result ur tsrc' or @class='web-result ur tsrc_Wiki-SA' or @class='web-result ur tsrc_tube youtube-result ']");

【讨论】:

以上是关于在 C# 中使用 xpath 选择具有不同类的多个 div 节点的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 中使用具有默认命名空间的 Xpath

如何在表中选择Record的链接包含多个不同类的行,每列具有相同的类名

C#:XPath 选择具有包含子字符串的属性的节点?

C# WPF 想要将数据存储在一个类中,并在不同 wpf 窗口中的多个不同类中使用

如何使用 XPath 忽略命名空间

如何在 C# 中使用 XPath 包含