HTMLAgilityPack SelectNodes选择所有<img/>元素

时间:2011-10-25 00:31:47

标签: c# html regex xpath html-agility-pack

我正在用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。

2 个答案:

答案 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
}