2010-09-29 20 views
5

मैं इस क्षेत्र को पार्स करने की कोशिश कर रहा हूं, लेकिन इसे काम पर नहीं ला सकता। वर्तमान प्रयास:सी # एचटीएमएल एजिलिटी पैक (SelectSingleNode)

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


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

त्रुटि: ऑब्जेक्ट संदर्भ किसी ऑब्जेक्ट के उदाहरण पर सेट नहीं है।

किसी भी मदद की सराहना करें।

@ जॉन - मैं आश्वस्त कर सकता हूं कि HTML सही ढंग से लोड हो गया है। मैं सीखने के उद्देश्यों के लिए अपना फेसबुक नाम पढ़ने की कोशिश कर रहा हूं। फायरबग प्लगइन से एक स्क्रीनशॉट यहां दिया गया है। मैं जिस संस्करण का उपयोग कर रहा हूं वह 1.4.0 है।

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

मुझे लगता है कि समस्या यह है कि PROFILE_NAME एक बच्चे नोड या कुछ और है, यही कारण है कि मैं इसे पढ़ने में सक्षम नहीं कर रहा हूँ है?

+0

क्या आपने डीबगिंग करने का प्रयास किया है? आपका कोड किस लाइन पर असफल रहता है? लिखित रूप में आपका कोड सही ढंग से काम करता है। –

+0

मैंने उस लाइन को पोस्ट किया जिस पर यह विफल रहता है। – josh

+0

क्या आप अपना एचटीएमएल लोड करने वाले कोड को दिखा सकते हैं? इसके अलावा, आपकी श्रृंखला में कौन सा ऑब्जेक्ट शून्य है? क्या आपके पास एक ही आईडी के साथ एकाधिक H1 टैग हैं? आप एचटीएमएल एजिलिटी पैक का किस संस्करण का उपयोग कर रहे हैं? –

उत्तर

0

इस प्रयास करें:

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

काम नहीं करता है। "अभिव्यक्ति को नोड-सेट पर मूल्यांकन करना चाहिए।" – josh

18

पेज कि वास्तव में <h1 id='profile_name'> टैग लिखने पर JavaScript न होने के कारण, तो कारण अपने कोड काम नहीं करता है तो आप एक उपयोगकर्ता से पेज का अनुरोध कर रहे हैं एजेंट (या AJAX के माध्यम से) जो जावास्क्रिप्ट निष्पादित नहीं करता है तो आपको तत्व नहीं मिलेगा।

मैं निम्नलिखित चयनकर्ता का उपयोग करके अपने खुद के नाम प्राप्त करने में सक्षम था:

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

इसे एक उत्तर के रूप में चिह्नित किया जाना चाहिए। यह वास्तव में मेरी मदद की। डायनामिक जेनरेट कोड इस डीएल में काम नहीं करता है। –

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(); 

    } 

इसके साथ ठीक है ("// एक [@href]"); आप इसे ऊपर के रूप में आजमा सकते हैं। मददगार

संबंधित मुद्दे