C # / Html Ошибка пакета Agility "Значение не может быть нулевым. Имя параметра: Источник." - PullRequest
1 голос
/ 03 апреля 2012

Я использовал html agility pack раньше и добился хороших результатов с небольшим количеством проб и ошибок. В настоящее время я пытаюсь использовать его для возврата набора узлов с xpath, который я получаю, щелкнув правой кнопкой мыши «Копировать XPath» в Firefox. Я провел некоторый поиск и вижу, что браузер часто добавляет «tbody» для тегов таблицы. Я попытался это с удалением этого без удачи. Вот xpath, данный мне Firefox:

/html/body/p[3]/table/tbody/tr/td/table/tbody/tr[3]

Использование его как есть выдает ошибку: " Значение не может быть нулевым. Имя параметра: источник. "

Это происходит в строке:

nodeList = htmlDoc.DocumentNode.SelectNodes("/html/body/p[3]/table/tbody/tr/td/table/tbody/tr[3]").ToList();

Я продолжу читать, а пока, если это кому-то легко исправить, буду признателен за подсказку.

Обновление: это фактический код:

protected override List<IDataPoint> ReturnDataPointsFromIndividualAddressString(string AddressString)
{
       List<IDataPoint> earningsAnnouncements = new List<IDataPoint>(); //Not used, yet..

       HtmlWeb hwObject = new HtmlWeb();
       HtmlDocument htmlDoc = hwObject.Load(AddressString);

       if (htmlDoc.DocumentNode != null)
       {
               List<HtmlNode> nodeList = new List<HtmlNode>();
               nodeList = htmlDoc.DocumentNode.SelectNodes("/html/body/p[3]/table/tbody/tr/td/table/tbody/tr[3]").ToList();
       }
}

1 Ответ

5 голосов
/ 04 апреля 2012

Кажется, эта ошибка возникает в этой строке:

nodeList = htmlDoc.DocumentNode.SelectNodes("/html/body/p[3]/table/tbody/tr/td/table/tbody/tr[3]").ToList();

Дело в том, что если метод SelectNodes не находит узлы по переданному выражению xpath, он возвращает null. Вы можете найти больше информации в этом ответе на аналогичный вопрос HTML Agility Pack Null Reference . И затем вы вызываете метод ToList() для объекта null, который на самом деле вызывает NullReferenceException.

Чтобы избежать этого, проверьте переменную this с null следующим образом:

var nodes = htmlDoc.DocumentNode.SelectNodes(...);
if (nodes != null)
{
     nodeList = nodes.ToList();
}
...