【问题标题】:Get Links in class with html agility pack使用 html 敏捷包获取类中​​的链接
【发布时间】:2010-05-18 13:55:44
【问题描述】:

类 alt 有很多 tr。我想获取所有链接(或最后一个),但我不知道如何使用 html 敏捷包。

我尝试了 a 的变体,但我只得到所有链接或没有。它似乎不仅仅得到节点中没有意义的那个,因为我正在写 n.SelectNodes

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

【问题讨论】:

  • 你能显示你试图解析的 html 的 sn-p 吗?我不完全清楚你要做什么
  • @jaltiere:他想要 CSS 选择器 tr.alt a

标签: c# html-agility-pack


【解决方案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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-29
      • 1970-01-01
      • 1970-01-01
      • 2014-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多