2016-08-29 3 views
0

Хотя я добавил ссылку на System.Xml.Xpath из Silverlight 5, я по-прежнему получаю эту ошибку при попытке получить ссылку на определенный класс из HTML-документа :Ссылка на объект не установлена ​​в экземпляр объекта при использовании XPATH с HtmlAgilityPack

Дополнительная информация: Ссылка на объект не установлена ​​в экземпляр объекта.

Мой код:

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, но я не понимаю, почему

+0

Вы не сказали нам, на какой строке это ошибка. Вы проверили, что SelectNodes действительно что-то возвращает? –

+0

@the_lotus, ошибка возникает в 'SelectNodes'. Он ничего не возвращает – ali

+1

Вам нужно использовать Silverlight 5 System.Xml.Xpath, если вы пишете программу Silverlight 5, иначе она будет работать с обычной сборкой System.Xml. –

ответ

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 и проанализировать это.