C # / Html Ошибка пакета agility "Значение не может быть пустым. Имя параметра: Источник."

c#-4.0 html-agility-pack

Вопрос

Раньше я использовал 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();
       }
}

Популярные ответы

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

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

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

Чтобы избежать этой проверки, эта переменная имеет значение null :

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


Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему