// div [@ id = 'resultStats'] "Ошибка - PullRequest
0 голосов
/ 28 февраля 2012

Я хочу получить результаты Google как div.но я принимаю ошибку "Ссылка на объект не установлена ​​на экземпляр объекта."

мой код:

var doc = new HtmlWeb().Load("http://www.google.com/search?q=love");
var div = doc.DocumentNode.SelectSingleNode("//div[@id='resultStats']");
var text = div.InnerHtml.ToString();         <---    this line
textBox1.Text = div.ToString();
var matches = Regex.Matches(text, @"About ([0-9,]+) ");
var total = matches[0].Groups[1].Value;

я пытаюсь этот код:

int counter = 0;
HtmlWeb hw = new HtmlWeb();
HtmlAgilityPack.HtmlDocument doc = hw.Load("http://www.google.com/search?q=love");
foreach (HtmlNode link in doc.DocumentNode.SelectNodes("//a[@href]"))
{
    counter = counter + 1;
}
MessageBox.Show(counter.ToString());

iсм. 97 в окне сообщения.

, но я пытаюсь этот код:

HtmlWeb hw = new HtmlWeb();
HtmlAgilityPack.HtmlDocument doc = hw.Load("http://www.google.com/search?q=love");
foreach (HtmlNode link in doc.DocumentNode.SelectNodes("//a[@href]"))
{
    MessageBox.Show(link.ToString());
}

Я вижу "HtmlAgiliytPack.HtmlNode" в окне сообщения 97 раз.

1 Ответ

0 голосов
/ 28 февраля 2012

Первая ошибка связана с тем, что ваш загруженный HTML не содержит элемент <div> с id='resultStats'. Вот почему ваша div переменная null, и, следовательно, div.InnerHtml дает вам NullReferenceException.

Что касается второй проблемы: при использовании link.ToString() вы вызываете .ToString() метод переменной типа HtmlNode, который, по-видимому, не перегружен и возвращает только краткое имя типа. Я подозреваю, что вы хотите вывести сам узел связи. Для этого просто используйте .OuterHtml свойство по вашей ссылке:

MessageBox.Show(link.OuterHtml);


Просто примечание: свойство HtmlNode.InnerHtml является типом string, поэтому вызывать метод ToString() для типа string здесь не обязательно.
...