2011-01-18 27 views
15

Tôi có chuỗi biến này:Làm thế nào để lưu chuỗi này vào tệp XML?

string xml = @"<Contacts> 
    <Contact> 
    <Name>Patrick Hines</Name> 
    <Phone Type=""Home"">206-555-0144</Phone> 
    <Phone Type=""Work"">425-555-0145</Phone> 
    <Phone Type=""Mobile"">332-899-5678</Phone> 
    <Address> 
     <Street1>123 Main St</Street1> 
     <City>Mercer Island</City> 
     <State>WA</State> 
     <Postal>68042</Postal> 
    </Address> 
    </Contact> 
    <Contact> 
    <Name>Dorothy Lee</Name> 
    <Phone Type=""Home"">910-555-1212</Phone> 
    <Phone Type=""Work"">336-555-0123</Phone> 
    <Phone Type=""Mobile"">336-555-0005</Phone> 
    <Address> 
     <Street1>16 Friar Duck Ln</Street1> 
     <City>Greensboro</City> 
     <State>NC</State> 
     <Postal>27410</Postal> 
    </Address> 
    </Contact> 
</Contacts>"; 

Làm thế nào tôi có thể tiết kiệm chuỗi này vào một tập tin XML trong ổ đĩa của tôi c? Sử dụng C#.

+0

Sử dụng phương pháp System.IO.File lớp. – adatapost

Trả lời

50

Thực tế rằng đó là XML về cơ bản là không thích hợp . Bạn có thể lưu bất kỳ văn bản vào một tập tin rất đơn giản với File.WriteAllText:

File.WriteAllText("foo.xml", xml); 

Lưu ý rằng bạn cũng có thể chỉ định mã hóa, mặc định là UTF-8. Vì vậy, ví dụ, nếu bạn muốn viết một tập tin trong ASCII đồng bằng:

File.WriteAllText("foo.xml", xml, Encoding.ASCII); 
+0

nếu sir muốn đọc xml đã lưu của tôi trở lại chương trình của tôi dưới dạng chuỗi? Tôi có nên sử dụng 'XmlTextReader' không? – yonan2236

+2

@ yonan2236: Sau đó, chỉ cần sử dụng 'File.ReadAllText'. Như Jon Skeet nói, bạn dường như không thực sự làm bất cứ điều gì cụ thể về XML; bạn chỉ muốn làm tập tin cơ bản I/O trên dữ liệu văn bản? – Ani

+0

Tha thứ cho sự thiếu hiểu biết của tôi ... Tôi chỉ đang cố gắng gì đó. – yonan2236

7

Nếu bạn không cần phải làm bất cứ xử lý trên chuỗi (với một thư viện XML, ví dụ), bạn chỉ có thể làm:

File.WriteAllText(@"c:\myXml.xml", xml); 
+2

+1 Để sử dụng đường dẫn chính xác, nên lưu một số đầu trầy xước cho OP. :) –

6
XmlDocument xdoc = new XmlDocument(); 
xdoc.LoadXml(yourXMLString); 
xdoc.Save("myfilename.xml"); 
6
System.IO.File.WriteAllText("filename.xml", xml); 
1

Nếu bạn muốn lưu các chuỗi như nó vốn có mà không thực hiện bất kỳ kiểm tra trên cho dù đó là tốt được hình thành hoặc hợp lệ, sau đó là đã được trả lời ở trên, sử dụng System.IO.File.WriteAllText("C:\myfilename.xml", xml);

Như đã lưu ý, mặc định này sẽ lưu tệp dưới dạng UTF-8, nhưng bạn có thể chỉ định mã hóa như Jon Skeet đã đề cập.

tôi khuyên bạn nên thêm một khai báo XML để chuỗi, ví dụ,

<?xml version="1.0" encoding="UTF-8"?> 

và đảm bảo mã hóa trong khai báo phù hợp mà trong phương pháp WriteAllText. Nó có khả năng tiết kiệm một số tiền hợp lý của rắc rối vào ngày sau đó, đánh giá bởi tần suất của các câu hỏi mã hóa XML trên stackoverflow.

Nếu bạn muốn đảm bảo XML là tốt được hình thành và/hoặc hợp lệ, sau đó bạn sẽ cần phải sử dụng một phân tích cú pháp XML trên nó lần đầu tiên, chẳng hạn như XDocument doc = XDocument.Parse(str); phương pháp đó cũng sẽ bị thay thế nếu bạn muốn giữ khoảng trắng: XDocument.Parse(str, LoadOptions.PreserveWhitespace)

sau đó bạn có thể thực hiện xác nhận trên đó http://msdn.microsoft.com/en-us/library/bb340331.aspx

trước khi lưu sang file: doc.Save("C:\myfilename.xml");

2

Bạn có thể làm điều này:

string path = @"C:\testfolder\testfile.txt"; 

using (System.IO.StreamWriter file = new System.IO.StreamWriter(path)) 
{  
    file.Write(text); 
} 

Bạn cũng có thể làm được điều này sau khi bạn đã tạo một tài liệu XML, nhưng nó là chậm:

xdoc.Save 
Các vấn đề liên quan