2011-01-18 21 views
15

Bu dize değişkeni vardır:Bu dize XML dosyasına nasıl kaydedilir?

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

nasıl tahrik c bir XML dosyası içine bu dize kurtarabilir ? C# kullanma. (örneğin, bir XML kütüphanesi ile) dize üzerinde bir işlem yapmanıza gerek yoksa

+0

Kullanım System.IO.File sınıf yöntemleri. – adatapost

cevap

50

XML var aslında temelde alakasız . Sen File.WriteAllText ile çok basit bir dosyaya herhangi bir metin kaydedebilirsiniz: Ayrıca kodlamayı UTF-8 varsayılan belirtebilirsiniz

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

Not. Yani, örneğin, düz ASCII bir dosyayı yazmak isterseniz:

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

eğer kaydedilmiş xml'imi bir dizge olarak programıma geri okumak istersem efendim? XmlTextReader kullanmalı mıyım? – yonan2236

+2

@ yonan2236: Sonra sadece 'File.ReadAllText' kullanın. Jon Skeet'in dediği gibi, gerçekten XML'e özgü hiçbir şey yapmıyor gibi görünüyorsunuz; Metin verisinde sadece temel dosya G/Ç yapmak ister misiniz? – Ani

+0

Cehaletimi bağışla ... Sadece bir şey deniyorum. – yonan2236

7

, sadece yapabileceği:

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

+1 Doğru yolu kullanmak için, OP için kafa çizilmemelidir. :) –

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

bunu geçerli bir iyi biçimli ya olmasından bağımsız olarak herhangi bir denetimi gerçekleştirmeden olduğu gibi dize kaydetmek istiyorsanız, olarak Yukarıda da belirtildiği gibi, System.IO.File.WriteAllText("C:\myfilename.xml", xml);

'u kullanın. Ayrıca belirtildiği gibi, bu dosya varsayılan olarak UTF-8 olarak kaydedilir, ancak Jon Skeet olarak belirtilen kodlamayı belirtebilirsiniz. Ben mesela dizeye bir XML bildirimi eklemenizi öneririz

,

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

ve bildiriminde kodlamasını sağlayan WriteAllText yönteminde uyan

. Daha sonraki bir tarihte, yığın aktarımındaki XML kodlama sorularının sıklığına bakarak, adil bir miktar güçlük kaydetme olasılığı yüksektir.

XML sağlamak istiyorsanız

bu boşluğu korumak istiyorsanız o zaman bu yöntem, aynı zamanda geçersiz kılınır böyle XDocument doc = XDocument.Parse(str); olarak, ilk üzerinde bir XML ayrıştırıcı kullanmanız gerekecektir, iyi biçimli ve/veya geçerlidir: XDocument.Parse(str, LoadOptions.PreserveWhitespace)

ardından http://msdn.microsoft.com/en-us/library/bb340331.aspx

dosyaya kaydetmeden önce üzerine doğrulama gerçekleştirebilir: doc.Save("C:\myfilename.xml");

2

bunu yapabilirsin:

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

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

bir XML belgesi oluşturduktan sonra da bunu yapabilirsiniz, ancak daha yavaştır:

xdoc.Save 
İlgili konular