将 XPATH 与 HtmlAgilityPack 一起使用时,对象引用未设置为对象的实例

Object reference not set to an instance of an object when using XPATH with HtmlAgilityPack

尽管我已经添加了对 Silverlight 5 中 System.Xml.Xpath 的引用,但当我尝试从 [=21] 中获取具有特定 class 的 link 时,我仍然会遇到此错误=] 文件:

Additional information: Object reference not set to an instance of an object.

我的代码:

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 时好像有问题,但我不明白为什么

出现异常是因为您的 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 以找出 class 名称是什么。 class 名称可能是由 JavaScript 生成的,在这种情况下,您必须将页面加载到浏览器控件中并等待它完成处理,然后获取呈现的 HTML 并解析它。