Search code examples
c#html-agility-pack

HtmlAgilityPack HasAttribute?


All I want to do is

node.Attributes["class"].Value

But if the node doesn't have the class attribute, it crashes. So, I have to check for its existence first, right? How do I do that? Attributes is not a dict (its a list that contains an internal dict??), and there's no HasAttribute method (just a HasAttributes which indicates if it has any attribute at all). What do I do?


Solution

  • Updated answer

    Use node.Attributes["class"]?.Value to return null if the attribute is missing. This will be the same as the ValueOrDefault() below.

    Original answer

    Try this:

    String val;
    if(node.Attributes["class"] != null)
    {
      val = node.Attributes["class"].Value;
    }
    

    Or you might be able to add this

    public static class HtmlAgilityExtender
    {
        public static String ValueOrDefault(this HtmlAttribute attr)
        {
            return (attr != null) ? attr.Value : String.Empty;
        }
    }
    

    And then use

    node.Attributes["class"].ValueOrDefault();
    

    I havent tested that one, but it should work.