Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to read XML file using System.IO.Stream with LINQ

Tags:

c#

xml

asp.net

linq

I will be passing the xml file like this:

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'

like image 370
Nick Kahn Avatar asked Jul 19 '10 14:07

Nick Kahn


2 Answers

Are you using .NET 3.5 by any chance? XDocument.Load(Stream) apparently only arrived in .NET 4.

You might want to use the overload which takes an XmlReader (which is supported in 3.5).

EDIT: Sample code:

static XDocument LoadFromStream(Stream stream)
{
    using (XmlReader reader = XmlReader.Create(stream))
    {
        return XDocument.Load(reader);    
    }
}
like image 179
Jon Skeet Avatar answered Oct 20 '22 02:10

Jon Skeet


The XDocument.Load(Stream) method is new in .NET 4. For earlier versions of the framework, you need to read the stream first and pass it in as a string:

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

    var document = XDocument.Parse(streamContents);
}
like image 44
LorenzCK Avatar answered Oct 20 '22 02:10

LorenzCK