【问题标题】:Object reference not set to an instance of an object when using XPATH with HtmlAgilityPack将 XPATH 与 HtmlAgilityPack 一起使用时,对象引用未设置为对象的实例
【发布时间】:2016-08-29 11:13:08
【问题描述】:

虽然我添加了对 Silverlight 5 中 System.Xml.Xpath 的引用,但在尝试从 HTML 文档中获取某个类的链接时,我仍然收到此错误:

附加信息:对象引用未设置为对象的实例。

我的代码:

Dim doc As HtmlDocument = New HtmlDocument()
doc.LoadHtml(New Net.WebClient().DownloadString(sourceUrl))

For Each row As HtmlNode In doc.DocumentNode.SelectNodes("//a[@class='base-link']")
    Console.Write(row.Name)
Next

如果我只做SelectNodes("//a"),那么我不会收到任何错误。看起来,使用@class时出现问题,但我不明白为什么

【问题讨论】:

  • 您没有告诉我们错误在哪一行。你检查过 SelectNodes 是否真的返回了一些东西?
  • @the_lotus,错误发生在SelectNodes。它不返回任何东西
  • 如果您正在编写 Silverlight 5 程序,您只需要使用 Silverlight 5 System.Xml.Xpath,否则它将与通常的 System.Xml 程序集一起使用。

标签: vb.net xpath html-agility-pack


【解决方案1】:

发生异常是因为您的 XPath 查询没有选择任何节点。

您可以通过以下方式防范它:

Option Infer On
' ... '
Dim myLinks = doc.DocumentNode.SelectNodes("//a[@class='base-link']")
If myLinks IsNot Nothing Then
    For Each row In myLinks
        Console.WriteLine(row.Name)
    Next
End If

我建议您检查正在加载的 HTML 以找出类名是什么。可能是类名是由 JavaScript 生成的,在这种情况下,您必须将页面加载到浏览器控件中并等待它完成处理,然后获取呈现的 HTML 并对其进行解析。

【讨论】:

    猜你喜欢
    • 2013-11-03
    • 1970-01-01
    • 2013-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多