2012-04-03 74 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

相關問題