HTML XPath 按类名搜索

Posted

技术标签:

【中文标题】HTML XPath 按类名搜索【英文标题】:HTML XPath Searching by class name 【发布时间】:2017-10-05 15:51:35 【问题描述】:

我在 c# 中遇到了 xpath 的问题 我想找到具有这种结构的所有元素 我有 10 个链接,它们都具有这种结构:

<div class="PartialSearchResults-item" data-zen="true">
<div class="PartialSearchResults-item-title">
<a class="PartialSearchResults-item-title-link result-link"target="_blank" href='https://www.google.com/'> Google</a>
    </div>
<p class="PartialSearchResults-item-url">www.google.com</p>
<p class="PartialSearchResults-item-abstract">Search the world.</p>
   </div>

例如,对于这个示例,我想获取“Google”、“www.google.com”和“搜索世界”。

var titles = hd.DocumentNode.SelectNodes("//div[contains(@class, 'PartialSearchResults-item')]");
string link;
foreach (htmlNode node in titles)
string description = node.SelectSingleNode(".//*[contains(@class,'PartialSearchResults-item-abstract')]").InnerText;

link = node.SelectSingleNode(".//*[contains(@class,'PartialSearchResults-item-url')]").InnerText;

 string title = node.SelectSingleNode(".//a[contains(@class,'PartialSearchResults-item-title-link result-link')]").InnerText;

但我得到错误空引用

【问题讨论】:

【参考方案1】:

问题在于您获得titles 的查询。您正在寻找 class 属性包含 PartialSearchResults-item 的 div,这是您项目的根节点。但也有其他节点可以满足您的查询,例如具有 PartialSearchResults-item-title 类的 div 也可以满足您的查询。然后在选择这 2 个 div 之后,您将对其进行迭代并尝试获取子节点的总和,对于第一次迭代,您的代码将正常工作,因为您有正确的节点,但在第二次迭代中,您有一个类为 PartialSearchResults-item-title 的节点只有一个a,因此当您查询描述时,您将在第二次迭代中获得NullReferenceException,因为您正在尝试获取null 对象的InnerText 属性的值

string description = node.SelectSingleNode(".//*[contains(@class,'PartialSearchResults-item-abstract')]").InnerText;

我建议不要使用contains。在您的情况下,您的根节点只有一个类PartialSearchResults-item,因此您可以像这样查询它

var titles = hd.DocumentNode.SelectNodes("//div[@class='PartialSearchResults-item']");

【讨论】:

您的解决方案是正确的,但我也被困在同一点上,在我的情况下,类名 PartialSearchResults-item(例如)我也有其他类。所以无法通过使用var titles = hd.DocumentNode.SelectNodes("//div[@class='PartialSearchResults-item']"); 来获得结果,因为使用这种语法我需要给每个类名以及不会被修复的类名。

以上是关于HTML XPath 按类名搜索的主要内容,如果未能解决你的问题,请参考以下文章

按属性搜索 XmlNode

简单的标签搜索--xpath

intellij idea 的全局搜索快捷键方法

intellij idea 的全局搜索快捷键方法

idea 开发工具搜索的快捷键总结

intellij idea 的全局搜索快捷键方法