【问题标题】:Html Agility xpath id error - Yahoo FinanceHtml Agility xpath id 错误 - 雅虎财经
【发布时间】:2014-05-12 03:03:31
【问题描述】:

我正在尝试使用 HTML Agility Pack 在雅虎财务上获取公司的部门,但我不断收到未设置为对象异常实例的对象引用。为什么我的代码会抛出这个异常?我已经多次检查了 xpath Id。

string Url = "http://www.finance.yahoo.com/q/pr?s=MSFT+Profile";
HtmlWeb web = new HtmlWeb();
HtmlDocument doc = web.Load(Url);
string xpathid = "//*[@id=\"yfncsumtab\"]/tbody/tr[2]/td[1]/table[2]/tbody/tr/td/table/tbody/tr[2]/td[2]/a";
string sector = doc.DocumentNode.SelectNodes(xpathid)[0].InnerText;
Console.WriteLine(sector);

这是引发异常的行:

string sector = doc.DocumentNode.SelectNodes(xpathid)[0].InnerText;

【问题讨论】:

  • 基本上,您的 XPath 不匹配任何元素,因此,当您尝试访问不存在的(null)元素的 InnerText 时 - 会抛出 NullReferenceException
  • 我使用chrome浏览器并按F12查找xpath id,所以我认为xpath id是有效的。
  • 在访问之前测试SelectNodes的结果。
  • @user1637158 这大概是因为Chrome works against the DOM not the basic HTML source code。可能存在差异。

标签: c# xpath html-agility-pack


【解决方案1】:

可能是因为 SelectNodes 返回 null...但您仍然尝试访问它。

您需要说明是哪一行引发了异常。

将多个操作塞入一行代码会使调试变得比实际需要的更加困难。

[edit] 您更新后的帖子证实了我的建议。

【讨论】:

  • 这没有提供问题的答案。要批评或要求作者澄清,请在其帖子下方发表评论。
  • 感谢您分享您的意见。注意我指出了最可能的问题,就提出更好的问题提出了建议,并提出了一种更好的编程风格以提高调试的便利性。如果他不能用这些信息解决问题,恐怕从长远来看,用勺子喂他答案对任何人都没有真正的帮助。
  • 感谢周到的回复,我在审核过程中投了这个答案(没有投反对票),看来这个问题应该作为“信息不足”关闭。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-30
相关资源
最近更新 更多