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)
似乎此错误发生在此行上:
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)
| 归档时间: |
|
| 查看次数: |
2252 次 |
| 最近记录: |