我的C#有点生疏,我以前从未用它编写XML.如果我尝试编写除元素之外的任何内容,我就无法将XML写入文件.这是我的测试代码:
var guiPath = txtGuiPath.Text; MessageBox.Show("Dumping File: " + guiPath); try { var writer = new XmlTextWriter("client_settings.xml", null); writer.WriteStartDocument(); writer.WriteComment("Config generated on 01/01/01"); writer.WriteStartElement("Config"); writer.WriteStartElement("GuiPath"); writer.WriteString(guiPath); writer.WriteEndElement(); writer.WriteEndElement(); writer.WriteEndDocument(); writer.Close(); } catch (Exception ex) { MessageBox.Show(ex.Message); } MessageBox.Show("Finished Dumping");
如果guiPath为空,我会得到以下XML:
但如果guiPath中有任何文本,那么没有任何内容写入文件.我甚至可以删除client_settings.xml文件并反复激活此代码,除非guiPath为空,否则永远不会生成XML文件.将类似"This is a test"的内容传递给WriteString()也可以.
更新
因为我试图写出一个系统路径,这似乎是个问题.如果我删除所有反斜杠,它将正确地写入结果字符串,但如果我将它传递给WriteString或WriteCData,则XML根本不会写入.
更新2
事实证明我遇到这么多问题的原因是因为XML文件是在guiPath设置的任何路径中生成的,而不是在应用程序运行的目录中生成的(所以对我来说看起来它没有生成在所有).因此,如果我将guiPath设置为'C:\ Program Files\externalApp\appName.exe',它将XML文件保存为'C:\ ProgramFiles\externalApp\client_settings.xml',而不是在应用的启动文件夹中.为什么,我不知道.我开始传递Application.StartupPath并将文件名附加到它,现在它工作得很好.
感谢您的帮助!
您可能想要检查System.Xml.Linq中的API.这是一种更灵活的生成和编写XML的方法.编写文档可能大致如下:
XDocument document = new XDocument(); document.Add(new XComment("Config generated on 01/01/01")); document.Add(new XElement("Config", new XElement("GuiPath", guiPath))); // var xmlWriter = new XmlTextWriter("client_settings.xml", null); // document.WriteTo(xmlWriter); // thanks to Barry Kelly for pointing out XDocument.Save() document.Save("client_settings.xml");