Analizza la tabella html utilizzando LINQ e HtmlAgilityPack

c# html-agility-pack linq

Domanda

Voglio analizzare la data, collegare il testo e collegare href da table class = 'nice' sulla pagina Web http://cslh.cz/delegace.html?id_season=2013

Ho creato oggetto DelegationLink

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

e usato con LINQ per creare List of 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();

che prende la colonna della data su uno per uno e la combina con la colonna di collegamento in ogni riga, ma voglio semplicemente prendere ogni riga nella tabella e ottenere data, href e hreftext da quella riga. Sono nuovo di LINQ e ho usato Google per 4 ore senza alcun effetto. Grazie per l'aiuto.

Risposta accettata

Beh, è ​​piuttosto facile, devi solo selezionare i tr nelle chiamate della funzione SelectNodes e regolare un po 'il tuo codice. Qualcosa come questo.

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();


Related

Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché