2011-01-18 22 views
15

que tienen esta variable de cadena:¿Cómo guardar esta cadena en un archivo 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>"; 

¿Cómo puedo guardar esta cadena en un archivo XML en mi unidad C? Usando C#.

+0

métodos de clase Uso System.IO.File. – adatapost

Respuesta

50

El hecho de que es XML es básicamente irrelevante . Puede guardar cualquier texto en un archivo de forma muy sencilla con File.WriteAllText:

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

Tenga en cuenta que también se puede especificar la codificación, que por defecto UTF-8. Así por ejemplo, si desea escribir un archivo en formato ASCII:

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

¿Qué pasa si señor si quiero leer mi xml guardado de nuevo en mi programa como una cadena? ¿Debería usar 'XmlTextReader'? – yonan2236

+2

@ yonan2236: Entonces simplemente use 'File.ReadAllText'. Como dice Jon Skeet, en realidad no pareces estar haciendo nada específico de XML; solo desea hacer E/S de archivos básicos en datos de texto? – Ani

+0

Perdona mi ignorancia ... Solo estoy intentando algo. – yonan2236

7

Si no necesita hacer ningún tipo de procesamiento en la cuerda (con una biblioteca de XML, por ejemplo), usted podría hacer:

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

+1 Para usar la ruta correcta, debe guardar algunos arañazos en la cabeza para el OP. :) –

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

Si desea guardar la cadena tal y como son sin realizar ninguna comprobación de si está bien formado o válida, entonces como ha sido respondida arriba, use System.IO.File.WriteAllText("C:\myfilename.xml", xml);

Como también se ha notado, de manera predeterminada guarda el archivo como UTF-8, pero puede especificar la codificación como mencionó Jon Skeet.

me gustaría recomendar la adición de una declaración XML a la cadena, por ejemplo,

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

y asegurar la codificación en la declaración coincide con que en el método WriteAllText. Es probable que ahorre una gran cantidad de molestias en una fecha posterior, a juzgar por la frecuencia de preguntas de codificación XML en stackoverflow.

Si desea garantizar el XML está bien formado y/o válida, entonces usted tendrá que utilizar un analizador XML en él primero, como XDocument doc = XDocument.Parse(str); también se anula dicho método, si desea conservar los espacios en blanco: XDocument.Parse(str, LoadOptions.PreserveWhitespace)

a continuación, puede realizar la validación en él http://msdn.microsoft.com/en-us/library/bb340331.aspx

antes de guardar en el archivo: doc.Save("C:\myfilename.xml");

2

usted puede hacer esto:

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

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

También puede hacer esto después de haber creado un documento XML, pero es más lento:

xdoc.Save 
Cuestiones relacionadas