【问题标题】:C#/ Html Agility pack error "Value cannot be null. Parameter name: Source."C#/ Html 敏捷包错误“值不能为空。参数名称:来源。”
【发布时间】:2012-04-03 19:04:11
【问题描述】:

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

/html/body/p[3]/table/tbody/tr/td/table/tbody/tr[3]

按原样使用会引发错误:“Value cannot be null. Parameter name: source.

这发生在网上:

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

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

更新:这是实际代码:

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();
       }
}

【问题讨论】:

  • 您能发布导致此错误的代码吗?
  • 好的,我会更新原帖..

标签: c#-4.0 html-agility-pack


【解决方案1】:

此行似乎出现此错误:

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

问题是,如果SelectNodes 方法没有通过传递的xpath 表达式找到节点,它会返回null。您可以在this answer 中找到类似问题HTML Agility Pack Null Reference 的更多信息。然后在 null 对象上调用 ToList() 方法,这实际上会导致 NullReferenceException

为避免这种情况,请检查 this 变量是否与 null 类似,如下所示:

var nodes = htmlDoc.DocumentNode.SelectNodes(...);
if (nodes != null)
{
     nodeList = nodes.ToList();
}

【讨论】:

  • 其实错误发生在:HtmlDocument htmlDoc = hwObject.Load(AddressString);
  • @StatsViaCs,这很奇怪。我看不出HtmlWeb.Load 如何使用source 参数抛出NullReferenceException。您能否发布导致此错误的AddressString 的值?
  • 我的错误亚历克斯..它确实把它扔到你建议的线上,我已经离开了一点,抱歉。
  • 你是对的,确实是null,所以以后我会用你的方法来避免异常。我想我的问题是我的 xpath 出了什么问题?
  • @StatsViaCsh,这取决于 HTML 源代码,以及您要查找的节点
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-23
  • 1970-01-01
  • 2019-06-12
  • 1970-01-01
  • 1970-01-01
  • 2020-08-03
  • 1970-01-01
相关资源
最近更新 更多