2010-11-03 27 views
6

Tất cả tôi muốn làm làHtmlAgilityPack HasAttribute?

node.Attributes["class"].Value 

Nhưng nếu nút không có thuộc tính class, nó bị treo. Vì vậy, tôi phải kiểm tra sự tồn tại của nó trước, phải không? Làm thế nào để làm điều đó? Attributes không phải là một dict (danh sách của nó có chứa một dict nội bộ ??), và không có phương pháp HasAttribute (chỉ là một HasAttributes cho biết nếu nó có bất kỳ thuộc tính nào cả). Tôi làm gì?

+2

Bạn có chắc chắn kiểm tra 'node.Attributes [" class "]' không trả về null không? –

+0

@Kirk: Đúng vậy .... nghĩ rằng nó đã ném một ngoại lệ vì một lý do nào đó. Cuộc gọi tốt. – mpen

Trả lời

13

Hãy thử điều này:

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

Hoặc bạn có thể để thêm video này

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

Và sau đó sử dụng

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

tôi havent thử nghiệm mà một, nhưng nó sẽ làm việc.

+0

Bạn không thể khai báo biến trên câu lệnh 'if' duy nhất ... –

+0

hehe, cảm ơn vì đã tỉnh táo, vì vậy tôi không phải :-) –

+0

muốn họ thực hiện một cái gì đó như val = node.Attributes ["class"] .Giá trị ??? ""; nếu bạn không quan tâm đến null ở bất cứ đâu ... – Doggett

3

Vui lòng thử này:

String abc = String.Empty;  
     if (tag.Attributes.Contains(@"type")) 
     { 
      abc = tag.Attributes[@"type"].Value; 
     } 
0

Bộ luật này có thể được sử dụng để nhận được tất cả văn bản giữa hai thẻ script.

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; 
    } 
Các vấn đề liên quan