2011-10-05 23 views
7

Tengo algo de código:XDocument.Load() Error

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

no puedo cargar mi respuesta en mi documento XML. Me sale el siguiente error:

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

Esto se está volviendo realmente frustrante. ¿Qué estoy haciendo mal?

Respuesta

13

A diferencia XmlDocument.Load, XDocument.Load es un método estático regresar un nuevo XDocument:

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

Parece bastante inútil para leer la corriente hasta el final entonces crear un StringReader sin embargo. También es inútil crear el StreamReader en primer lugar, y si el documento XML no es en UTF-8, podría causar problemas. Mejor:

para .NET 4, donde hay una sobrecarga XDocument.Load(Stream):

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

para .NET 3.5, en la que no es:

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

O, alternativamente, simplemente dejar que LINQ to XML hacer todo el trabajo:

XDocument doc = XDocument.Load(url); 

EDIT: No e que el error del compilador le proporcionó suficiente información para que funcione: le indicó que no puede llamar al XDocument.Load como doc.Load y, en su lugar, dar el nombre del tipo. El siguiente paso debería haber sido consultar la documentación, que por supuesto da ejemplos.

+0

Aparece el error 'no se puede convertir de 'System.IO.Stream' a 'System.Xml.XmlReader' cuando realizo la solución que usted recomienda. –

+0

Estaba usando el ejemplo de JesseLiberty y ahí es donde tengo problemas. –

+0

@JoeTyman: ¿Dónde entra 'XmlReader'? No he especificado nada que requiera un 'XmlReader'. ¿De cuáles de mis muestras de código salió ese error, y dónde? –

Cuestiones relacionadas