如何使用linq到xml在HtmlAgilityPack中找到节点集合?

时间:2012-08-11 04:02:31

标签: linq linq-to-xml html-agility-pack

我想从各种网站中提取信息。我正在使用HtmlAgilityPack和Linq来使用XML。到目前为止,我已经设法通过编写以下内容从网站中的单个节点中提取值:

var q = document.DocumentNode.DescendantNodes()
        .Where(n => n.Name == "img" && n.Id == "GraphicalBoard001")
        .FirstOrDefault();

但我真的对以“GraphicalBoard”开头的整个img集合感兴趣。我试过像:

var q2 = document.DocumentNode.DescendantNodes()
        .Where(n => n.Name == "img" && n.Id.Contains("GraphicalBoard"))
        .Select...

但似乎linq不喜欢Contains方法,因为我失去了intellisense中的Select选项。如何从“GraphicalBoard”中提取Id开头的所有img-tag?

1 个答案:

答案 0 :(得分:1)

  

如何使用“GraphicalBoard”提取Id开头的所有img-tag?

你已经拥有它,只需停止拨打Where()Where()调用按满足谓词的项过滤集合。

虽然您应该编写它,以便过滤img后代,而不是所有后代。

var query = doc.DocumentNode.Descendants("img")
               .Where(img => img.Id.StartsWith("GraphicalBoard"));