13

クラスaltにはたくさんのtrがあります。すべてのリンク(または最後の最初のリンク)を取得したいのですが、htmlアジリティパックを使用する方法がわかりません。

のバリアントを試しましたが、すべてのリンクのみを取得するか、まったく取得しません。私がn.SelectNodesを書いているので、それは意味をなさないノードで1つだけを取得するようには見えません

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

2 に答える 2

15

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

どちらのメソッドも、リンクではないアンカーを返すことに注意してください。

于 2010-05-18T13:59:01.650 に答える
11

単一のクエリですべてのリンクを選択しない理由:

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>
于 2010-05-26T04:33:07.307 に答える