Joh*_*ton 4 .net c# xml file-io
我目前有一个C#程序,它使用.NET Framework将数据写入XML文件.
if (textBox1.Text!="" && textBox2.Text != "")
{
XmlTextWriter Writer = new XmlTextWriter(textXMLFile.Text, null);
Writer.WriteStartDocument();
Writer.WriteStartElement("contact");
Writer.WriteStartElement("firstName");
Writer.WriteString(textBox1.Text);
Writer.WriteEndElement();
Writer.WriteEndElement();
Writer.WriteEndDocument();
Writer.Close();
}
else
{
MessageBox.Show("Nope, fill that textfield!");
}
Run Code Online (Sandbox Code Playgroud)
问题是我每次尝试保存新内容时都会覆盖我的XML文件.
我有两个null和Encoding.UTF8第二个参数,XmlTextWriter但它似乎没有改变非重写/覆盖功能.
您可以使用XDocument:
public static void Append(string filename, string firstName)
{
var contact = new XElement("contact", new XElement("firstName", firstName));
var doc = new XDocument();
if (File.Exists(filename))
{
doc = XDocument.Load(filename);
doc.Element("contacts").Add(contact);
}
else
{
doc = new XDocument(new XElement("contacts", contact));
}
doc.Save(filename);
}
Run Code Online (Sandbox Code Playgroud)
然后像这样使用:
if (textBox1.Text != "" && textBox2.Text != "")
{
Append(textXMLFile.Text, textBox1.Text);
}
else
{
MessageBox.Show("Nope, fill that textfield!");
}
Run Code Online (Sandbox Code Playgroud)
这将创建/附加到以下XML结构的联系人:
<?xml version="1.0" encoding="utf-8"?>
<contacts>
<contact>
<firstName>Foo</firstName>
</contact>
<contact>
<firstName>Bar</firstName>
</contact>
</contacts>
Run Code Online (Sandbox Code Playgroud)
将数据添加到XML文件的唯一方法是将其读入,添加数据,然后再次写出完整的文件.
如果您不想将整个文件读入内存,则可以使用流接口(例如XmlReader/ XmlWriter)来交错读取,追加和写入.