C#HtmlAgilityPack:通过节点循环时出错

C#HtmlAgilityPack:通过节点循环时出错,c#,html-parsing,html-agility-pack,C#,Html Parsing,Html Agility Pack,我正在遍历一些标记,在这个标记中有一个 我想抓取标签的href。但是在一些中没有标记,因此我的代码抛出错误 我的代码是: List<string> Website = new List<string>(); HtmlDocument hoteleWebsiteDoc = new HtmlDocument(); hoteleWebsiteDoc.LoadHtml(hotels.InnerHtml); var hotelWebsite = from lnks in hot

我正在遍历一些
  • 标记,在这个标记中有一个
    
    
    我想抓取
    标签的href。但是在一些
  • 中没有
    标记,因此我的代码抛出错误

    我的代码是:

    List<string> Website = new List<string>();
    HtmlDocument hoteleWebsiteDoc = new HtmlDocument();
    hoteleWebsiteDoc.LoadHtml(hotels.InnerHtml);
    
    var hotelWebsite = from lnks in hoteleWebsiteDoc.DocumentNode.Descendants()
                        where lnks.Name == "a" && lnks.Attributes.Contains("class") &&
                          lnks.Attributes["class"] != null &&
                          lnks.Attributes["class"].Value.Contains("track-visit-website") &&
                          lnks.InnerText.Trim().Length > 0
                        select new
                        {
                         Url = lnks.Attributes["href"].Value,
                        };
    
    foreach (var website in hotelWebsite)
    {
        if (!string.IsNullOrEmpty(website.Url) || !string.IsNullOrWhiteSpace(website.Url))
            Website.Add(website.Url.Trim());
        else
            Website.Add(" ");
    }
    
    列表网站=新建列表();
    HtmlDocument hoteleWebsiteDoc=新建HtmlDocument();
    hoteleWebsiteDoc.LoadHtml(hotels.InnerHtml);
    var hotelWebsite=来自hoteleWebsiteDoc.DocumentNode.subjections()中的lnks
    其中lnks.Name==“a”&&lnks.Attributes.Contains(“类”)&&
    lnks.Attributes[“类”]!=空的&&
    lnks.Attributes[“class”].Value.Contains(“跟踪访问网站”)&&
    lnks.InnerText.Trim().长度>0
    选择新的
    {
    Url=lnks.Attributes[“href”].Value,
    };
    foreach(酒店网站中的var网站)
    {
    如果(!string.IsNullOrEmpty(website.Url)| |!string.IsNullOrWhiteSpace(website.Url))
    Add(Website.Url.Trim());
    其他的
    网站。添加(“”);
    }
    

    我该怎么办?我想先检查标记是否存在,然后执行代码。但是如何检查标记是否存在?或者有其他方法吗?

    此解决方案考虑了
    a
    标记不包含
    href
    属性的可能情况,例如:

    var items = hoteleWebsiteDoc
               .DocumentNode.SelectNodes("//li/a[@class='track-visit-website']");
    
    if(items!=null)
    {
        var links = items.Select(a => a.Attributes["href"].Value).ToList();
    }
    
    <li>
       <a class='track-visit-website' href='abc1'>Anchor1</a>
    </li>
    <li>
       <a class='track-visit-website'>Anchor 2</a>
    </li> 
    <li> 
    </li>
    
    或者,如果您想保留另一个解决方案,您可以为此更改代码,以检查是否包含
    href
    属性:

    if (items != null)
    {
       var links = items.Where(a => a.Attributes.Contains("href")).Select(a => a.Attributes["href"].Value).ToList();
    }
    

    @L.B如果href属性不存在,您的解决方案将返回NullReferenceException
    var hoteleWebsiteDoc = (from element in doc.DocumentNode.Descendants("a")
                            where element.ParentNode.Name.Equals("li") && 
                            element.Attributes.Contains("class") &&
                            element.Attributes.Contains("href") &&
                            element.Attributes["class"].Value.Equals("track-visit-website")
                            select new
                                     {
                                       URL = element.Attributes["href"].Value
                                     }).ToList();
    
    foreach (var obj in hrefsList)
    {
       Console.WriteLine(obj.URL);
    }
    
    if (items != null)
    {
       var links = items.Where(a => a.Attributes.Contains("href")).Select(a => a.Attributes["href"].Value).ToList();
    }