如何使用带有LINQ的System.IO.Stream读取XML文件

时间:2010-07-19 14:00:18

标签: c# asp.net xml linq

我将像这样传递xml文件:

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

错误:

  

错误1'System.Xml.Linq.XDocument.Load(string)'的最佳重载方法匹配有一些无效的参数

     

无法从'System.IO.Stream'转换为'string'

2 个答案:

答案 0 :(得分:12)

您是否有机会使用.NET 3.5? XDocument.Load(Stream)显然只是在.NET 4中出现。

您可能想要使用the overload which takes an XmlReader(3.5支持)。

编辑:示例代码:

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

答案 1 :(得分:3)

XDocument.Load(Stream)方法是.NET 4中的新方法。对于框架的早期版本,您需要首先读取流并将其作为字符串传递:

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

    var document = XDocument.Parse(streamContents);
}