使用带有HtmlAgilityPack的XPATH时,对象引用未设置为对象的实例

时间:2016-08-29 11:13:09

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

虽然我已经从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时出现问题,但我不明白为什么

1 个答案:

答案 0 :(得分:0)

发生异常是因为没有使用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并解析它。