我正在用C#制作一个项目,它基本上是一个用于图像搜索相关游戏的图像屏幕刮刀。我正在尝试使用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);
}
请注意, urls 是公共列表集合:
public List<string> urls = new List<string>();
我的foreach循环抛出异常:
对象引用未设置为对象的实例。
检查汽车,当然, imgs 为空。有没有更好的方法来追踪这个问题的根源?我不知道这是我的Xpath还是什么。
最令人沮丧的部分是我已经让它工作了,但搞砸了我的文件版本并丢失了我的工作。 DERP。
答案 0 :(得分:12)
您可能在以下行中输入错字:
HtmlAttribute src = img.Attributes["@src"];
我让这个为我工作(注意@位置):
HtmlAttribute src = img.Attributes[@"src"];
答案 1 :(得分:3)
这对我有用。我认为您的文档未正确加载,因此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
}