2012-04-03 72 views
0

我以前使用过html敏捷包,并且有一些试验和错误都有很好的结果。我目前正在尝试使用它来通过在Firefox中右键单击“Copy XPath”来返回带有xpath的节点集。我做了一些搜索,我发现浏览器通常会为表格标签添加“tbody”。我试过,没有运气就取消了这个。下面是火狐给我的XPath的:C#/ Html敏捷包错误“值不能为空参数名称:源。”

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

使用它原样就是引发错误:“值不能为空参数名:源。”

这发生在行:

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

你可以张贴这将导致该错误代码? – Alex 2012-04-03 19:42:31

+0

当然,我会更新原来的帖子.. – StatsViaCsh 2012-04-03 19:50:41

回答

4

似乎在这条线出现此错误:

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。然后你调用一个ToList()方法在null对象上,这实际上会导致NullReferenceException

为了避免这种情况检查该变量对null这样的:

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

其实错误发生在:HtmlDocument htmlDoc = hwObject.Load(AddressString); – StatsViaCsh 2012-04-03 20:09:47

+0

@StatsViaC,这很奇怪。我看不到'HtmlWeb.Load'如何用'source'参数抛出'NullReferenceException'。你能发布导致这个错误的'AddressString'的值吗? – Alex 2012-04-03 20:20:05

+0

我的错误亚历克斯..它确实把它扔在你建议的路线上,我走了一会儿,对不起。 – StatsViaCsh 2012-04-03 20:25:32

相关问题