【问题标题】:LINQ to get the Descendant of type "a" from HTMLNodesCollectionLINQ 从 HTMLNodeCollection 获取类型为“a”的后代
【发布时间】:2014-11-08 16:47:20
【问题描述】:

我有一个 HTML 节点集合:

 var imageColletion = htmlDoc.DocumentNode.Descendants("div").Where(d =>     
d.Attributes.Contains("Class") && d.Attributes["Class"].Value.
Contains("entry-thumbnail hover-thumb")).Select(x => x.ChildNodes);

现在从 imageColletion 我想得到“a”。尝试过

    var allImages = imageColletion.Select(nodeCollection => 
  nodeCollection.Descendants("a"));

在这里我没有得到任何输出。我的查询有什么问题?

EDIT1: HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlWeb().Load(url);

  var headerCollection = htmlDoc.DocumentNode.Descendants("h2").Where(d => d.Attributes.Contains("Class") && d.Attributes["Class"].Value.Contains("entry-title")).Select(x => x.ChildNodes);
  var titleCollection = headerCollection.Select(x => x.Select(y => y.InnerHtml).Where(strValue=>strValue!="\n").FirstOrDefault());

 var imageColletion = htmlDoc.DocumentNode.Descendants("div").Where(d => d.Attributes.Contains("Class") && d.Attributes["Class"].Value.Contains("entry-thumbnail hover-thumb")).Select(x => x.ChildNodes);
                //var allImages = imageColletion.Select(nodeCollection => nodeCollection.Select(x => x.InnerHtml).Where(imgstring=>imgstring.Contains("img")));
 var allImages = imageColletion.Select(nodeCollection => nodeCollection.Descendants("a"));

HTML:

<div class="entry-thumbnail hover-thumb">
<a href="/" title="Actions for Photographers" rel="bookmark">
<img src="img" class="attachment-thumbnail wp-post-image" alt="Free for Photographers"> </a>
</div>

【问题讨论】:

  • 发布您正在使用的数据,而不是它的屏幕截图。
  • @JeffMercado,已发布代码。希望对您有所帮助
  • 代码并没有说明你正在使用什么,也许你想要得到什么。但如果我们不知道 html 的样子,那也无济于事。
  • @JeffMercado,现在更新了 HTML

标签: c# .net linq html-agility-pack


【解决方案1】:

鉴于您的 html,这是可行的

var imgElems = htmlDoc.DocumentNode
               .SelectNodes("//div[@class='entry-thumbnail hover-thumb']/a/img");

我没有看到您的标题所说的任何 H 元素...

【讨论】:

    【解决方案2】:

    问题是您选择了 div 的所有子项。您要么必须对其进行过滤,要么专门获取 h 孩子。

    ....Select(x => x.ChildNodes.Where(y => y.Name == "a"));
    
    ....Select(x => x.Elements("a"));
    

    我自己会使用 xpath 查询。

    var xpath =
       "//div[contains(@class,'entry-thumbnail')][contains(@class,'hover-thumb')]/a";
    var query = htmlDoc.DocumentNode.SelectNodes(xpath);
    

    【讨论】:

    • 那么你期待什么?您在标题中提出了一个寻找“h”元素的问题,所以我给了您答案。但是你的问题的主体要求不同的元素。然后你遗漏了所有关键细节,比如你实际拥有的数据是什么样的。然后按字面意思回答。 应该看到并纠正它,而不是或其他任何人,
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-15
    • 2013-08-31
    • 1970-01-01
    • 2012-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多