我之前使用過html agility pack,並且通過一些試驗和錯誤獲得了良好的結果。我正在嘗試使用它來返回一個帶有xpath的節點集,右鍵單擊Firefox中的“Copy XPath”。我做了一些搜索,我發現瀏覽器通常會為表標籤添加“tbody”。我嘗試了刪除它沒有運氣。這是Firefox給我的xpath:
/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();
}
}
看來這行出現了這個錯誤:
nodeList = htmlDoc.DocumentNode.SelectNodes("/html/body/p[3]/table/tbody/tr/td/table/tbody/tr[3]").ToList();
問題是,如果SelectNodes
方法沒有通過xpath表達式找到節點,則返回null
。您可以在此答案中找到類似問題HTML Agility Pack Null Reference的更多信息。然後在null
對像上調用ToList()
方法,這實際上會導致NullReferenceException
。
為避免這種情況,請將此變量檢查為null
如下所示:
var nodes = htmlDoc.DocumentNode.SelectNodes(...);
if (nodes != null)
{
nodeList = nodes.ToList();
}