c# - 用 C# 编写 XML

标签 c# xml file-io

我的 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/

相关文章:

c# - DropDownList 中的 ASP.NET 2 DataValuefield

c - 有没有一种简单的方法可以从文件中读取未经验证的十进制值?

c - c 中的 getline() 更改我的数据并导致内存错误

tomcat - 如何在不将文件放入 Tomcat/bin 文件夹的情况下读取 Web 应用程序中的文件

C#,是否可以避免定义私有(private)字段并仍然在公共(public)字段上使用 set/get?

c# - 在 C# 中动态读取 Excel

c# - 使用委托(delegate)时 CPU 百分比高

xml - 如何在 XSLT 中使用 &lt;![CDATA[]]>?

java - OnCreateOptions 被调用,但 OnOptionsItemSelected 未被调用

xml - XPath 计数为什么它不能本能地工作?