我在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>
例如,我希望得到这个样本&#34; Google&#34;和#34; www.google.com&#34;和#34;搜索世界。&#34;
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;}
但我得到错误空引用
答案 0 :(得分:4)
问题在于您获得titles
的查询。您正在查找哪个class
属性包含PartialSearchResults-item
的div,这是您项目的根节点。但是还有其他节点满足您的查询,例如,类PartialSearchResults-item-title
的div也满足您的查询。然后在选择这两个div之后,你迭代它们并尝试获得sum子节点,对于第一次迭代,你的代码将正常工作,因为你有正确的节点,但在第二次迭代中你有节点{{1}只有一个PartialSearchResults-item-title
,所以当你查询描述时,你将在第二次迭代中得到a
,因为你试图获得NullReferenceException
InnerText
属性的值。 1}}对象
null
我建议不要使用string description = node.SelectSingleNode(".//*[contains(@class,'PartialSearchResults-item-abstract')]").InnerText;
。在您的情况下,您的根节点只有一个类contains
,因此您可以像这样查询它
PartialSearchResults-item