2010-07-19 41 views
5

estaré pasando el archivo XML como esto:Cómo leer el archivo XML usando System.IO.Stream con LINQ

File1.PostedFile.InputStream 

//reading xml file..... 
public static void readXMLOutput(Stream stream) 
{ 

    System.Xml.Linq.XDocument xml = System.Xml.Linq.XDocument.Load(stream); 

    var query = from p in xml.Element("ste").Element("Application") 
       //where (int)p.Element("Id") == 1 
       select Page; 

    foreach (var record in query) 
    { 
     Response.Write("dfe") + record.Element("dfe").Value; 
    } 

error:

Error 1 The best overloaded method match for 'System.Xml.Linq.XDocument.Load(string)' has some invalid arguments

cannot convert from 'System.IO.Stream' to 'string'

Respuesta

12

¿Está utilizando .NET 3.5 por cualquiera ¿oportunidad? XDocument.Load(Stream) aparentemente solo llegó a .NET 4.

Es posible que desee utilizar the overload which takes an XmlReader (que es compatible con 3.5).

EDIT: Código de ejemplo:

static XDocument LoadFromStream(Stream stream) 
{ 
    using (XmlReader reader = XmlReader.Create(stream)) 
    { 
     return XDocument.Load(reader);  
    } 
} 
+0

sí, estoy usando el framework 3.5. ¿Cuál debería ser la alternativa? –

+0

¿Puedes mostrarme algunas líneas de muestra Transmitir usando xmlReader? –

+0

@teki: Editado para dar un método que podrías usar. –

3

XDocument.Load(Stream) El método es nuevo en .NET 4. Para las versiones anteriores del marco, es necesario leer la primera corriente y pasarlo como una cadena:

public static void readXMLOutput(Stream stream){ 
    string streamContents; 
    using(var sr = new StreamReader(stream)){ 
     streamContents = sr.ReadToEnd(); 
    } 

    var document = XDocument.Parse(streamContents); 
} 
+0

me sale un error cuando intento cargar la secuenciaContenidos y el error es: "Caracteres no válidos en la ruta". Mi xml es muy simple, nada de caracteres especiales. –

+1

XDocument.Load toma un nombre de archivo, no el XML en sí. Usted * podría * usar XDocument.Parse en su lugar, pero el código en esta respuesta actualmente asume UTF-8 ... sería más robusto usar XmlReader.Create IMO. –

+0

Sí, reparado. Gracias – LorenzCK