Получить ссылки в классе с пакетом гибкости html
Есть куча tr с классом alt. Я хочу получить все ссылки (или первый из последних), но я не могу понять, как с помощью пакета html agility.
Я пробовал варианты, но я только получаю все ссылки или ничего. Кажется, он не только получает значение в node, что не имеет смысла, так как я пишу n.SelectNodes
html.LoadHtml(page);
var nS = html.DocumentNode.SelectNodes("//tr[@class='alt']");
foreach (var n in nS)
{
var aS = n.SelectNodes("a");
...
}
Ответы
Ответ 1
Вы можете использовать LINQ:
var links = html.DocumentNode
.Descendants("tr")
.Where(tr => tr.GetAttributeValue("class", "").Contains("alt"))
.SelectMany(tr => tr.Descendants("a"))
.ToArray();
Обратите внимание, что это также будет соответствовать <tr class="Malto">
; вы можете заменить вызов Contains
регулярным выражением.
Вы также можете использовать Fizzler:
html.DocumentNode.QuerySelectorAll("tr.alt a");
Обратите внимание, что оба метода также возвращают привязки, которые не являются связями.
Ответ 2
Почему бы не выбрать все ссылки в одном запросе:
html.LoadHtml(page);
var nS = html.DocumentNode.SelectNodes("//tr[@class='alt']//a");
foreach(HtmlNode linkNode in nS)
{
//do something
}
Он действителен для html:
<table>
<tr class = "alt">
<td><'a href="link.html">Some Link</a></td>
</tr>
</table>