2010-07-19 32 views
5

tôi sẽ đi qua các tập tin xml như thế này:Làm thế nào để đọc file XML sử dụng System.IO.Stream với 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; 
    } 

lỗi:

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'

Trả lời

12

Bạn đang sử dụng .NET 3.5 bởi bất kỳ cơ hội? XDocument.Load(Stream) dường như chỉ đến trong .NET 4.

Bạn có thể muốn sử dụng the overload which takes an XmlReader (được hỗ trợ trong 3.5).

EDIT: Mẫu mã:

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

vâng tôi đang sử dụng 3.5 khung công tác. những gì nên được thay thế cho nó? –

+0

bạn có thể vui lòng chỉ cho tôi một số dòng mẫu Stream bằng xmlReader không? –

+0

@teki: Đã chỉnh sửa để đưa ra một phương pháp bạn có thể sử dụng. –

3

Phương pháp XDocument.Load(Stream) là mới trong .NET 4. Đối với phiên bản trước đó của khuôn khổ này, bạn cần phải đọc những dòng đầu tiên và vượt qua nó như một chuỗi:

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

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

i am gettign lỗi khi nó cố gắng tải streamContents và lỗi teh là: "Nhân vật bất hợp pháp trong đường dẫn.", Xml của tôi là khá nhiều rất đơn giản không phải ký tự đặc biệt không có gì. –

+1

XDocument.Load lấy tên tệp chứ không phải chính XML. Bạn * có thể * sử dụng XDocument.Parse thay thế - nhưng mã trong câu trả lời này hiện đang giả định UTF-8 ... nó sẽ mạnh mẽ hơn để sử dụng XmlReader.Create IMO. –

+0

Yup, đã được sửa. Cảm ơn – LorenzCK

Các vấn đề liên quan