如何将这个字符串保存到XML文件中?

29

我有这个字符串变量:

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#将此字符串保存到我的C驱动器上的XML文件中?


请使用 System.IO.File 类的方法。 - KV Prajapati
6个回答

69

事实上,它是XML并不重要。你可以非常简单地使用File.WriteAllText将任何文本保存到文件中:

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

请注意您也可以指定编码,默认为UTF-8。例如,如果您想要写一个纯ASCII文件:

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

2
@yonan2236:那就直接使用File.ReadAllText。正如Jon Skeet所说,你似乎并没有做任何与XML相关的事情;你只想在文本数据上进行基本的文件I/O操作? - Ani
2
@yonan2236:问题并不是完全“错误”,更多的是它混淆了两个概念:保存文本文件和文本文件内容为XML。 - Jon Skeet
1
我还建议在字符串中添加XML声明,并确保声明中的编码与WriteAllText方法中的编码匹配。考虑到stackoverflow上XML编码问题的频率,这很可能会在以后节省大量麻烦。 - James Walford
1
@stt106:这意味着您的字符串包含文本“encoding =” utf-16“”。这不会受到File.WriteAllText中指定的任何编码的影响 - 它只是字符串的一部分。该文件仍将以UTF-8编码,这意味着XML声明实际上是错误的。 - Jon Skeet
我相信这个文件是ASCII兼容的,因为它只是一个包含英文字母和数字的小文件。我会尝试你建议的方法。谢谢。 - dragonfly02
显示剩余10条评论

14
XmlDocument xdoc = new XmlDocument();
xdoc.LoadXml(yourXMLString);
xdoc.Save("myfilename.xml");

8

如果您不需要使用XML库对字符串进行处理,那么您可以直接执行以下操作:

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

2
+1 对于使用正确的路径,应该可以为 OP 节省一些烦恼。 :) - Tim Lloyd

6
System.IO.File.WriteAllText("filename.xml", xml );

3
你可以这样做:
string path = @"C:\testfolder\testfile.txt";

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

你也可以在创建XML文档后执行此操作,但这会更慢:
xdoc.Save

2
如果你希望将字符串原样保存而不对其进行任何检查,以确定它是否格式良好或有效,则可以像上面回答的那样使用 System.IO.File.WriteAllText("C:\myfilename.xml", xml );
正如已经指出的那样,这默认将文件保存为UTF-8,但是你可以像Jon Skeet提到的那样指定编码。
我建议在字符串中添加XML声明,例如:
<?xml version="1.0" encoding="UTF-8"?>

确保声明中的编码与WriteAllText方法中的编码匹配,这很可能会在以后遇到XML编码问题时节省大量麻烦,根据stackoverflow上XML编码问题的频率判断。

如果您想确保XML格式正确和/或有效,则需要首先对其使用XML解析器,例如XDocument doc = XDocument.Parse(str); 如果要保留空格,则该方法也被重载:XDocument.Parse(str, LoadOptions.PreserveWhitespace)

您可以在此之上执行验证http://msdn.microsoft.com/en-us/library/bb340331.aspx

然后保存到文件:doc.Save("C:\myfilename.xml");


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接