2010-09-29 8 views
5

Bu alanı ayrıştırmaya çalışıyorum ama işe yaramayacağım. Geçerli girişim:C# Html Çeviklik Paketi (SelectSingleNode)

var name = doc.DocumentNode.SelectSingleNode("//*[@id='my_name']").InnerHtml; 


<h1 class="bla" id="my_name">namehere</h1> 

Hata: Nesne başvurusu bir nesnenin örneğine ayarlanmamış.

Herhangi bir yardımı için teşekkür ederiz.

@John - HTML'nin doğru şekilde yüklendiğinden emin olabilirsiniz. Öğrenme adına facebook adımı okumayı deniyorum. Firebug eklentisinden bir ekran görüntüsü. Kullandığım sürüm 1.4.0.

http://i54.tinypic.com/kn3wo.jpg

Ben bunu okumak mümkün değilim, bu yüzden sorun profile_name çocuk düğüm veya bir şey olduğunu sanırım?

+0

Hata ayıklamayı denediniz mi? Kodunuz hangi satırda başarısız oluyor? Yazılı olarak kodunuz doğru çalışıyor. –

+0

Başarısız olduğu satırı yayınladım. – josh

+0

HTML'nizi yükleyen kodu gösterebilir misiniz? Ayrıca, zincirinizde hangi nesne boş? Aynı kimliğe sahip birden fazla H1 etiketiniz var mı? Hangi HTML Çeviklik Paketi sürümünü kullanıyorsunuz? –

cevap

0

bu deneyin:

var name = doc.DocumentNode.SelectSingleNode("//@id='my_name'").InnerHtml; 
+0

Çalışmıyor. "İfade bir düğüm kümesine değerlendirmelidir." – josh

18

orada aslında <h1 id='profile_name'> etiketi dışarı yazıyor sayfadaki JavaScript, bu nedenle çünkü kod çalışmıyor nedeni bir Kullanıcıdan sayfayı isteyen eğer JavaScript'i yürütmeyen Ajan (veya AJAX aracılığıyla) o zaman öğeyi bulamazsınız.

Aşağıdaki seçici kullanarak kendi adını almak başardı:

string name = 
    doc.DocumentNode.SelectSingleNode("//a[@id='navAccountName']").InnerText; 
+0

Bu bir cevap olarak işaretlenmelidir. Bu aslında bana yardımcı oldu. Dinamik oluşturulan kod bu dll'de çalışmaz. –

0
HtmlAgilityPack.HtmlNode name = doc.DocumentNode.SelectSingleNode("//h1[@id='my_name']").InnerText; 
0
public async Task<List<string>> GetAllTagLinkContent(string content) 
    { 


     string html = string.Format("<html><head></head><body>{0}</body></html>", content); 
     HtmlDocument doc = new HtmlDocument(); 
     doc.LoadHtml(html); 
     var nodes = doc.DocumentNode.SelectNodes("//[@id='my_name']"); 
     return nodes.ToList().ConvertAll(r => r.InnerText).Select(j => j).ToList(); 

    } 

O için sorun ("// a [@href]"); Yukarıdaki gibi deneyebilirsiniz.Hope helpful