HtmlAgilityPack:按类获取所有元素

时间:2014-04-09 21:41:32

标签: c# asp.net .net regex html-agility-pack

我有一个HTML,我需要按类获取一些节点。所以我不能这样做,因为

  1. 我不知道XML路径
  2. 所需物品没有ID,只有班级
  3. HtmlAgilityPack不允许获取所有元素(如XDocument允许),但doc.Elements()只有在我有id时才有效,但我没有。所以我也不知道XML路径所以我不能使用SelectNodes方法
  4. 我不能使用正则表达式
  5. 我的代码是

    public static class HapHelper
    {
        private static HtmlNode GetByAttribute(this IEnumerable<HtmlNode> htmlNodes, string attribute, string value)
        {
            return htmlNodes.First(d => d.HasAttribute(attribute) && d.Attributes[attribute].ToString() == value);
        }
    
        public static HtmlNode GetElemenyByAttribute(this HtmlNode parentNode, string attribute, string value)
        {
            return GetByAttribute(parentNode.Descendants(), attribute, value);
        }
    
        public static bool HasAttribute(this HtmlNode d, string attribute)
        {
            return d.Attributes.Contains(attribute);
        }
    
        public static HtmlNode GetElementByClass(this HtmlNode parentNode, string value)
        {
            return parentNode.GetElemenyByAttribute("class", value);
        }
    }
    

    但它不起作用,因为Descendants()只返回最近的节点。

    我该怎么办?

1 个答案:

答案 0 :(得分:4)

学习XPath! :-)这很简单,并且会很好地为你服务。在这种情况下,你想要的是:

SelectNodes("//*[@class='" + classValue + "']") ?? Enumerable.Empty<HtmlNode>();