附加现有XML文件

我有一个现有的XML文件,我想在不改变格式的情况下追加。 现有文件如下所示:

  1  Steve Lawrence NYC   

如何使用此格式添加其他用户? 我现有的代码是:

  string fileLocation = "clients.xml"; XmlTextWriter writer; if (!File.Exists(fileLocation)) { writer = new XmlTextWriter(fileLocation, null); writer.WriteStartDocument(); // Write the Root Element writer.WriteStartElement("Clients"); // End Element and Close writer.WriteEndElement(); writer.Close(); } // Append new data here 

我曾想过使用XmlDocument Fragment来附加数据,但我不确定我是否可以维护现有格式(和空标签)而不会弄乱文件。

您可以给予的任何建议非常感谢。

编辑我已经更改了代码以读取原始XML但文件仍然被覆盖。

您应该使用XmlDocument类加载整个文件,在内存中修改它,然后将内容写回来替换原始文件。 别担心,它不会弄乱你的标记,你甚至可以要求它使用PreserveWhitespace属性PreserveWhitespace原始文档中的非重要空格( http://msdn.microsoft.com/en-us/library /system.xml.xmldocument.preservewhitespace.aspx )。

你可以试试这样的……

  string fileLocation = "clients.xml"; if (!File.Exists(fileLocation)) { XmlTextWriter writer = new XmlTextWriter( fileLocation, null ); writer.WriteStartElement( "Clients" ); writer.WriteEndElement(); writer.Close(); } // Load existing clients and add new XElement xml = XElement.Load(fileLocation); xml.Add(new XElement("User", new XAttribute("username", loginName), new XElement("DOB", dob), new XElement("FirstName", firstName), new XElement("LastName", lastName), new XElement("Location", location))); xml.Save(fileLocation); 

这应该让你开始,只需用你正在使用的任何东西替换变量,不要忘记添加System.Xml.Linq命名空间。

如果你仍然有问题回到这里,并帮助你完成它。

如果要使用序列化(意味着您希望将数据对象序列化为XML并附加到现有XML文件),则可以使用此通用方法SerializeAppend 。 它完全符合您的需求。 我还为可能受益的任何人添加了两种方法

 public static void Serialize(T obj, string path) { var writer = new XmlSerializer(typeof(T)); using (var file = new StreamWriter(path)) { writer.Serialize(file, obj); } } public static T Deserialize(string path) { var reader = new XmlSerializer(typeof(T)); using (var stream = new StreamReader(path)) { return (T)reader.Deserialize(stream); } } public static void SerializeAppend(T obj, string path) { var writer = new XmlSerializer(typeof(T)); FileStream file = File.Open(path, FileMode.Append, FileAccess.Write); writer.Serialize(file, obj); file.Close(); }