C# 尝试在HtmlAlityPack中按类获取链接时出现空引用异常

C# 尝试在HtmlAlityPack中按类获取链接时出现空引用异常,c#,html,asp.net,asp.net-mvc,html-agility-pack,C#,Html,Asp.net,Asp.net Mvc,Html Agility Pack,我有asp.net mvc应用程序和html页面,我使用HtmlAgilityPack解析它们,但当我尝试循环我的元素时,我在foreach中遇到了下一个错误:对象引用未设置为对象的实例。我的代码是下一个。有人知道我的错误在哪里吗?我对使用htmlagilitypack是个新手 HTML的一部分: <li class="b-serp-item i-bem" onclick="return {&quot;b-serp-item&quot;:{}}"> <i c

我有asp.net mvc应用程序和html页面,我使用HtmlAgilityPack解析它们,但当我尝试循环我的元素时,我在foreach中遇到了下一个错误:
对象引用未设置为对象的实例。我的代码是下一个。有人知道我的错误在哪里吗?我对使用htmlagilitypack是个新手

HTML的一部分:

<li class="b-serp-item i-bem" onclick="return {&quot;b-serp-item&quot;:{}}">
  <i class="b-serp-item__favicon" style="background-position: 0 -0px"></i>
  <h2 class="b-serp-item__title">
    <b class="b-serp-item__number">1</b>
    <a class="b-serp-item__title-link" href="http://googlescraping.com/google-scraper.php">Google</a>
  </h2>
</li>
我在google drive中共享的Html输出:

我运行了您的代码,只做了一点小小的更改,我使用了
HtmlDocument.LoadHtml(stringContents)
而不是
HtmlDocument.Load(path)
,然后它就完美地工作了

我怀疑代码无法从路径中找到文件。确保文件使用<代码>文件。存在(WP)并考虑使用完全限定路径而不是仅使用文件名,使用<代码> WP= PATH。GetFullPath(WP) ./P>
或者先使用
string contents=File.ReadAllText(wp)读取内容
获取内容,然后使用
HtmlDocument
上的
LoadHtml
方法

SelectNodes
在未找到任何内容时返回
null
,而不是您可能期望的空集合。这就是为什么我通常添加
??调用
SelectNodes
后新建HtmlNodeCollection()
,这样枚举就不会抛出
NullReferenceException
。这并不能解释为什么它不返回节点,但看看你的代码,它很可能是异常的候选。除非您还有没有“href”属性的
标记……您是否有要解析的完整HTML?@jessehouwing是的,它存储在硬盘上。然后我从磁盘加载它。我想让你分享整个文档。@jessehouwing更新我的问题。
DateTime dt = DateTime.Now;
string dtf = String.Format("{0:u}", dt);
string wp = "page" + dtf + ".html";
HtmlDocument HD = new HtmlDocument();
HD.Load(wp);
string output = "";
foreach (HtmlNode node in HD.DocumentNode.SelectNodes("//a[@class='b-serp-item__title-link']"))
{
    output += node.GetAttributeValue("href", null) + " ";
}