【问题标题】:How do I find a collection of nodes in HtmlAgilityPack using linq to xml?如何使用 linq to xml 在 HtmlAgilityPack 中查找节点集合?
【发布时间】:2012-08-11 04:02:30
【问题描述】:

我想从各种网站提取信息。我正在使用 HtmlAgilityPack 和 Linq to 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 方法,因为我在智能感知中丢失了 Select 选项。如何提取 Id 以“GraphicalBoard”开头的所有 img-tags?

【问题讨论】:

  • 您意识到您没有关闭Where() 通话对吗?
  • 啊.. 这确实有点帮助。但是我该如何重写它以使其返回一个集合而不是 FirstOrDefault()?

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


【解决方案1】:

如何提取 ID 以“GraphicalBoard”开头的所有 img-tags?

您已经有了,只需拨打Where() 即可。 Where() 调用按满足谓词的项目过滤集合。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多