使用LINQ和HtmlAgilityPack解析html表

c# html-agility-pack linq

我想在网页http://cslh.cz/delegace.html?id_season=2013上解析日期,链接文本和链接来自table class ='nice'的 href

我创建了对象DelegationLink

public class DelegationLink
{
   public string date { get; set; }
   public string link { get; set; }
   public string anchor { get; set; }
}

并与LINQ一起使用它来创建DelegationLink列表

var parsedValues =
from table in htmlDoc.DocumentNode.SelectNodes("//table[@class='nice']")
from date in table.SelectNodes("tr//td")
from link in table.SelectNodes("tr//td//a")
   .Where(x => x.Attributes.Contains("href"))
select new DelegationLink
{
   date = date.InnerText,
   link = link.Attributes["href"].Value,
   anchortext = link.InnerText,
};
return parsedValues.ToList();

将日期列为ony并将其与每行中的链接列组合,但我只想简单地获取表中的每一行并从该行获取日期,href和hreftext。我是LINQ的新手,我使用谷歌4小时没有任何影响。谢谢您的帮助。

一般承认的答案

嗯,这很简单,你只需要在SelectNodes函数调用中选择tr并调整你的代码。像这样的东西。

var parsedValues = htmlDoc.DocumentNode.SelectNodes("//table[@class='nice']/tr").Skip(1)
.Select(r =>
      {
        var linkNode = r.SelectSingleNode(".//a");
        return new DelegationLink()
                  {
                    date = r.SelectSingleNode(".//td").InnerText,
                    link = linkNode.GetAttributeValue("href",""),
                    anchor = linkNode.InnerText,
                  };
      }
);
return parsedValues.ToList();


许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因