我的 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:
<?xml version="1.0"?>
<!--Config generated on 01/01/01-->
<Config>
<GuiPath />
</Config>
但如果 guiPath 中有任何文本,则不会向文件写入任何内容。我什至可以删除 client_settings.xml 文件并反复触发此代码,除非 guiPath 为空,否则永远不会生成 XML 文件。将“这是一个测试”之类的内容传递给 WriteString() 也可以。
更新
由于我正在尝试写出系统路径,所以这似乎是问题所在。如果我去掉所有反斜杠,它会正确地写入结果字符串,但如果我将它传递给 WriteString 或 WriteCData,XML 将根本不会写入。
更新 2
原来我遇到这么多问题的原因是因为 XML 文件是在 guiPath 设置的任何路径中生成的,而不是在应用程序运行的目录中(所以对我来说它看起来不是'根本不会生成)。因此,如果我将 guiPath 设置为“C:\.为什么,我不知道。我开始传递 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");
关于c# - 用 C# 编写 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/489173/