HtmlAgilityPack HasAttribute? - PullRequest
       14

HtmlAgilityPack HasAttribute?

8 голосов
/ 03 ноября 2010

Все, что я хочу сделать, это

node.Attributes["class"].Value

Но если узел не имеет атрибута class, он падает.Итак, я должен сначала проверить его существование, верно?Как я могу это сделать?Attributes не является dict (это список, который содержит внутренний dict ??), и нет метода HasAttribute (просто HasAttributes, который указывает, есть ли у него какой-либо атрибут).Что мне делать?

Ответы [ 3 ]

16 голосов
/ 03 ноября 2010

Обновленный ответ

Используйте node.Attributes["class"]?.Value для возврата null, если атрибут отсутствует. Это будет то же самое, что и ValueOrDefault() ниже.

Оригинальный ответ

Попробуйте это:

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

Или вы можете добавить это

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

А затем используйте

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

Я не проверял этот, но он должен работать.

3 голосов
/ 16 августа 2012

Пожалуйста, попробуйте это:

String abc = String.Empty;     
      if (tag.Attributes.Contains(@"type"))
      {
          abc = tag.Attributes[@"type"].Value;
      }
0 голосов
/ 19 сентября 2016

Этот код можно использовать для получения всего текста между двумя тегами скрипта.

String getURL(){
return @"some site address";
}
List<string> Internalscripts()
    {
        HtmlAgilityPack.HtmlDocument doc = new HtmlWeb().Load((@"" + getURL()));
        //Getting All the JavaScript in List
        HtmlNodeCollection javascripts = doc.DocumentNode.SelectNodes("//script");
        List<string> scriptTags = new List<string>();
        foreach (HtmlNode script in javascripts)
        {
            if(!script.Attributes.Contains(@"src"))
            {
                scriptTags.Add(script.InnerHtml);
            }
        }
        return scriptTags;
    }
...