HtmlAgilityPack разных версий работает по-разному C#
Есть программа, в которой при помощи xpath-запроса можно получить ссылки на изображения. Запрос:
var screen = HD.DocumentNode.SelectNodes("//textarea[@class='hidearea']/a");
Данные в Html Agility Pack загружаются следующим образом:
HD.LoadHtml(responseToString);
Где responseToString содержит следующий код:
https://jsfiddle.net/7fhyv1an/
Но переменная screen всегда возвращает null. При этом, аналогичный код в другой программе работает как надо. Единственное отличие: в программе, где он работает, версия Html Agility Pack - 1.4.5.9. А в программе, где он не работает, стоит Html Agility Pack версии 1.11.22.
Еще недавно заметил такую особенность на версии 1.4.5.9: программа отработала первую ссылку, скачала картинки. Я вставляю эту же ссылку второй раз (либо новую, без разницы), но картинки уже не находит. Выдает ошибку, что ссылка на объект не указывает на экземпляр объекта.
При этом, данной программой я пользуюсь уже года 2. И всегда все было нормально. А теперь вот такая проблемка...
Ответы (1 шт):
Ответ найден. Что я могу сказать, HtmlAgilityPack просто поумнел.
Содержимое тега <textarea> он теперь воспринимает не как HTML а как ноду типа textarea, что технически вполне логично, поэтому содержимое этой ноды нельзя напрямую получить через xpath. Это просто текст, а не список нод.
Чтобы распарсить это содержимое в список нод, можно пойти таким путем.
HD.LoadHtml(responseToString);
HtmlNodeCollection screen = HD.DocumentNode.SelectNodes("//textarea[@class='hidearea']");
HD.LoadHtml(screen[0].InnerHtml);
screen = HD.DocumentNode.SelectNodes("//a");
Код написан грубо, может наградить вас исключениями, поэтому обработка ошибок на вашей совести. Я просто показываю смысл всей этой истории с <textarea>