HTML 민첩성 팩으로 수업에서 링크를 얻으십시오.

c# html-agility-pack

문제

클래스 alt와 함께 tr의 무리가 있습니다. 나는 모든 링크 (또는 마지막 첫 번째)를 얻고 싶다. 그러나 html 민첩성 팩을 사용하는 방법을 이해할 수 없다.

나는 변종을 시도했지만 모든 링크 또는 아무것도 얻지 못했습니다. 그것은 나에게 n.SelectNodes를 쓰고 있기 때문에 의미가없는 노드에있는 노드를 얻는 것만으로 보인다.

html.LoadHtml(page);
var nS = html.DocumentNode.SelectNodes("//tr[@class='alt']");
foreach (var n in nS)
{
  var aS = n.SelectNodes("a");
  ...
}

수락 된 답변

LINQ를 사용할 수 있습니다.

var links = html.DocumentNode
           .Descendants("tr")
           .Where(tr => tr.GetAttributeValue("class", "").Contains("alt"))
           .SelectMany(tr => tr.Descendants("a"))
           .ToArray();

이 또한 <tr class="Malto"> 와 일치합니다. Contains 호출을 정규식으로 대체 할 수 Contains .

Fizzler 를 사용할 수도 있습니다.

var links = html.DocumentNode
           .Descendants("tr")
           .Where(tr => tr.GetAttributeValue("class", "").Contains("alt"))
           .SelectMany(tr => tr.Descendants("a"))
           .ToArray();

두 방법 모두 링크가 아닌 앵커를 반환합니다.


인기 답변

단일 쿼리에서 모든 링크를 선택하지 않는 이유는 무엇입니까?

html.LoadHtml(page);
var nS = html.DocumentNode.SelectNodes("//tr[@class='alt']//a");
foreach(HtmlNode linkNode in nS)
{
//do something
}

html에는 유효합니다.

html.LoadHtml(page);
var nS = html.DocumentNode.SelectNodes("//tr[@class='alt']//a");
foreach(HtmlNode linkNode in nS)
{
//do something
}



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.