2011-10-05 11 views
7

मैं कुछ कोड है:XDocument.Load() त्रुटि

WebRequest request = HttpWebRequest.Create(url); 
WebResponse response = request.GetResponse(); 
using (System.IO.StreamReader sr = 
    new System.IO.StreamReader(response.GetResponseStream())) 
{ 
    System.Xml.Linq.XDocument doc = new System.Xml.Linq.XDocument(); 
    doc.Load(new System.IO.StringReader(sr.ReadToEnd())); 
} 

मैं अपने XML दस्तावेज में मेरी प्रतिक्रिया लोड नहीं कर सकता। मुझे निम्न त्रुटि मिलती है:

Member 'System.XMl.Linq.XDocument.Load(System.IO.TextReader' cannot be accessed 
with an instance reference; qualify it with a type name instead. 

यह वास्तव में निराशाजनक हो रहा है। मैं क्या गलत कर रहा हूं?

XDocument doc = XDocument.Load(new StringReader(sr.ReadToEnd())); 

यह अंत को धारा को पढ़ने के लिए तो एक StringReader हालांकि बनाने सुंदर व्यर्थ लगता है:

उत्तर

13

XmlDocument.Load के विपरीत, XDocument.Load एक स्थिर विधि एक नया XDocument लौटने है। यह पहले स्थान पर StreamReader बनाने के व्यर्थ भी है - और यदि XML दस्तावेज़ UTF-8 में नहीं है, तो इससे समस्याएं पैदा हो सकती हैं। बेहतर:

.NET 4, जहां एक XDocument.Load(Stream) अधिभार नहीं है के लिए:

using (var response = request.GetResponse()) 
{ 
    using (var stream = response.GetResponseStream()) 
    { 
     var doc = XDocument.Load(stream); 
    } 
} 

.NET 3.5, जहां वहाँ नहीं है के लिए:

using (var response = request.GetResponse()) 
{ 
    using (var stream = response.GetResponseStream()) 
    { 
     var doc = XDocument.Load(XmlReader.Create(stream)); 
    } 
} 

या वैकल्पिक रूप से, बस LINQ एक्सएमएल जाने सभी काम करते हैं:

XDocument doc = XDocument.Load(url); 

संपादित करें: नहीं ई कि संकलक त्रुटि ने आपको जाने के लिए पर्याप्त जानकारी दी है: यह आपको बताया गया है कि आप XDocument.Load को doc.Load के रूप में कॉल नहीं कर सकते हैं, और इसके बजाय प्रकार का नाम दे सकते हैं। आपका अगला कदम दस्तावेज़ीकरण से परामर्श करना चाहिए था, जो निश्चित रूप से उदाहरण देता है।

+0

मुझे आपके द्वारा अनुशंसित समाधान करने पर त्रुटि 'System.IO.Stream' से 'System.Xml.XmlReader' में कनवर्ट नहीं किया जा सकता है। –

+0

मैं जेसीलिबर्टी के उदाहरण का उपयोग कर रहा था और यही वह जगह है जहां मुझे परेशानी है। –

+0

@ जोइटमैन: 'एक्सएमएल रीडर' कहां आता है? मैंने कुछ भी निर्दिष्ट नहीं किया है जिसके लिए 'XmlReader' की आवश्यकता है। मेरे कोड नमूने में से कौन सा त्रुटि आया, और कहां से? –