Разбирайте таблицу html с помощью LINQ и HtmlAgilityPack

c# html-agility-pack linq

Вопрос

Я хочу проанализировать дату, текст ссылки и ссылку href из таблицы class = 'nice' на веб-странице http://cslh.cz/delegace.html?id_season=2013

Я создал объект 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();

который принимает столбец даты один на один и объединяет его со столбцом ссылки в каждой строке, но я просто хочу просто взять каждую строку в таблице и получить дату, href и hreftext из этой строки. Я новичок в LINQ, и я использовал Google в течение 4 часов без какого-либо эффекта. Спасибо за помощь.

Принятый ответ

Ну, это довольно просто, вам просто нужно выбрать tr в SelectNodes функции SelectNodes и немного скорректировать код. Что-то вроде этого.

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
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему