我的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");
Run Code Online (Sandbox Code Playgroud)
如果guiPath为空,我会得到以下XML:
<?xml version="1.0"?>
<!--Config generated on 01/01/01-->
<Config>
<GuiPath />
</Config>
Run Code Online (Sandbox Code Playgroud)
但如果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并将文件名附加到它,现在它工作得很好.
感谢您的帮助!
mqp*_*mqp 12
您可能想要检查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");
Run Code Online (Sandbox Code Playgroud)