HtmlAgilityPack HasAttribute?

mpe*_*pen 8 c# html-agility-pack

我想做的就是

node.Attributes["class"].Value
Run Code Online (Sandbox Code Playgroud)

但是如果节点没有该class属性,它就会崩溃.所以,我必须首先检查它的存在,对吗?我怎么做?Attributes不是一个字典(它是一个包含内部字典的列表?),并且没有HasAttribute方法(只是一个HasAttributes,它指示它是否具有任何属性).我该怎么办?

Ole*_*hus 16

更新的答案

如果缺少该属性,则使用node.Attributes["class"]?.Value返回null.这将与ValueOrDefault()下面相同.

原始答案

试试这个:

String val;
if(node.Attributes["class"] != null)
{
  val = node.Attributes["class"].Value;
}
Run Code Online (Sandbox Code Playgroud)

或者您可以添加此功能

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

然后使用

node.Attributes["class"].ValueOrDefault();
Run Code Online (Sandbox Code Playgroud)

我没有测试过那个,但它应该可行.

  • @Doggett,你可以创建一个`IfNotNull`扩展方法,它允许`node.Attribute ["class"].IfNotNull(x => x.Value)`.不完全是你想要的,但我一直用它来解决这类问题. (2认同)
  • @Kirk很好,从来没有这样,只是注意到你可以使它完全通用所以它适用于任何类型..酷:)仍然会喜欢??? 或类似的东西;) (2认同)