Ответ 1
У вас может быть опечатка в следующей строке:
HtmlAttribute src = img.Attributes["@src"];
Я получил это, чтобы работать для меня (обратите внимание на @позицию):
HtmlAttribute src = img.Attributes[@"src"];
Я делаю проект на С#, который в основном скребок для экрана изображения для игры, связанной с поиском изображений. Я пытаюсь использовать HTMLAgilityPack, чтобы выбрать все элементы изображения и поместить их в HTMLNodeCollection, например:
//set up for checking autos
HtmlNodeCollection imgs = new HtmlNodeCollection(doc.DocumentNode.ParentNode);
imgs = doc.DocumentNode.SelectNodes("//img");
foreach (HtmlNode img in imgs)
{
HtmlAttribute src = img.Attributes["@src"];
urls.Add(src.Value);
}
Обратите внимание, что URL-адреса являются публичной коллекцией списков:
public List<string> urls = new List<string>();
Мой цикл foreach генерирует исключение:
Ссылка на объект не установлена в экземпляр объекта.
Проверяя авто, достаточно, imgs имеет значение null. Есть ли лучший способ отслеживать источник этой проблемы? Я понятия не имею, если это мой Xpath или что.
Самая неприятная часть - это то, что я уже получил ее на работу, но перепутал свои версии файлов и потерял работу. Derp.
У вас может быть опечатка в следующей строке:
HtmlAttribute src = img.Attributes["@src"];
Я получил это, чтобы работать для меня (обратите внимание на @позицию):
HtmlAttribute src = img.Attributes[@"src"];
Это работает для меня. Я думаю, что ваш документ загружен неправильно, поэтому xpath не возвращает совпадений.
HtmlDocument htmlDocument = new HtmlDocument();
htmlDocument.LoadHtml("<html><head></head><body><div><img /><div><img /><img/></div></div><img/></body></html>");
var nodes = htmlDocument.DocumentNode.SelectNodes("//img");
// 4 nodes found
foreach (var node in nodes)
{
// do stuff
}