C#/ Html Agility包错误“值不能为null。参数名称:Source。”

Sta*_*Csh 1 c#-4.0 html-agility-pack

我以前使用过html敏捷包,并且经过反复试验并取得了良好的效果。我目前正在尝试使用它来返回带有通过在Firefox中右键单击“复制XPath”而获得的xpath的节点集。我做了一些搜索,发现浏览器经常为表标签添加“ tbody”。我尝试删除它没有运气。这是Firefox给我的xpath:

/html/body/p[3]/table/tbody/tr/td/table/tbody/tr[3]
Run Code Online (Sandbox Code Playgroud)

按原样使用它会引发错误:“ 值不能为空。参数名称:source。 ”

这发生在线:

nodeList = htmlDoc.DocumentNode.SelectNodes("/html/body/p[3]/table/tbody/tr/td/table/tbody/tr[3]").ToList();
Run Code Online (Sandbox Code Playgroud)

我将继续阅读,与此同时,如果这对任何人来说都是一个简单的解决方法,我将不胜感激。

更新:这是实际的代码:

protected override List<IDataPoint> ReturnDataPointsFromIndividualAddressString(string AddressString)
{
       List<IDataPoint> earningsAnnouncements = new List<IDataPoint>(); //Not used, yet..

       HtmlWeb hwObject = new HtmlWeb();
       HtmlDocument htmlDoc = hwObject.Load(AddressString);

       if (htmlDoc.DocumentNode != null)
       {
               List<HtmlNode> nodeList = new List<HtmlNode>();
               nodeList = htmlDoc.DocumentNode.SelectNodes("/html/body/p[3]/table/tbody/tr/td/table/tbody/tr[3]").ToList();
       }
}
Run Code Online (Sandbox Code Playgroud)

Ale*_*lex 5

似乎此错误发生在此行上:

nodeList = htmlDoc.DocumentNode.SelectNodes("/html/body/p[3]/table/tbody/tr/td/table/tbody/tr[3]").ToList();
Run Code Online (Sandbox Code Playgroud)

问题是,如果SelectNodes方法未通过传递的xpath表达式找到节点,则将返回return null。您可以在类似问题HTML Agility Pack Null Reference的此答案中找到更多信息。然后,您在实际上导致的对象上调用方法。ToList()nullNullReferenceException

为了避免这种情况,请null像下面这样检查this变量:

var nodes = htmlDoc.DocumentNode.SelectNodes(...);
if (nodes != null)
{
     nodeList = nodes.ToList();
}
Run Code Online (Sandbox Code Playgroud)