LINQ 및 HtmlAgilityPack을 사용하여 html 테이블 구문 분석

c# html-agility-pack linq

문제

나는 웹 페이지 http://cslh.cz/delegace.html?id_season=2013 에서 날짜, 링크 텍스트 및 링크 href를 테이블 클래스 = 'nice' 로 파싱하려고합니다 .

객체 DelegationLink를 만들었습니다.

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

위임 링크 목록 을 만들려면 LINQ와 함께 사용하십시오.

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에 익숙하지 않고 효과없이 4 시간 동안 Google을 사용했습니다. 도와 주셔서 감사합니다.

수락 된 답변

글쎄, 그건 쉽지 SelectNodes , 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는 합법적입니까? 예, 이유를 알아보십시오.