2013-11-10 6 views
4

Я использую это в C# код для записи данных в XML-файл:Как добавить данные в существующий файл XML в C#

Employee[] employees = new Employee[2]; 
employees[0] = new Employee(1, "David", "Smith", 10000); 
employees[1] = new Employee(12, "Cecil", "Walker", 120000); 

using (XmlWriter writer = XmlWriter.Create("employees.xml")) 
{ 
    writer.WriteStartDocument(); 
    writer.WriteStartElement("Employees"); 

    foreach (Employee employee in employees) 
    { 
    writer.WriteStartElement("Employee"); 

    writer.WriteElementString("ID", employee.Id.ToString()); 
    writer.WriteElementString("FirstName", employee.FirstName); 
    writer.WriteElementString("LastName", employee.LastName); 
    writer.WriteElementString("Salary", employee.Salary.ToString()); 

    writer.WriteEndElement(); 
    } 

    writer.WriteEndElement(); 
    writer.WriteEndDocument(); 
} 

Пусть теперь перезапустить мое приложение, и я хочу, чтобы добавить новые данные в xml-файл без потери существующих данных, используя тот же способ, будет перезаписывать данные в моем XML-файле, я попытался выяснить, как это сделать, и я искал аналогичный пример, но я не мог прийти ни к чему, никаких идей?

+1

Простой способ будет читать файл в память, изменить его там, и перезаписать файл. –

+1

Проверьте этот ответ http://stackoverflow.com/questions/9188574/append-xml-file-using-xmlwriter –

ответ

7

Может быть, вы должны смотреть на некоторые примеры с использованием наборов данных и XML:

http://www.codeproject.com/Articles/13854/Using-XML-as-Database-with-Dataset

или использовать System.Xml.Serialization.XmlSerializer, когда dont't есть количество записей.

Пример с использованием XmlDocument

XmlDocument xd = new XmlDocument(); 
xd.Load("employees.xml"); 
XmlNode nl = xd.SelectSingleNode("//Employees"); 
XmlDocument xd2 = new XmlDocument(); 
xd2.LoadXml("<Employee><ID>20</ID><FirstName>Clair</FirstName><LastName>Doner</LastName><Salary>13000</Salary></Employee>"); 
XmlNode n = xd.ImportNode(xd2.FirstChild,true); 
nl.AppendChild(n); 
xd.Save(Console.Out); 
+1

с использованием приведенного выше кода и замены последней строки xd.Save ("employees.xml"); это то, что я искал, спасибо. –

1

Использование xml-записи для небольших объемов данных неудобно. Вам лучше использовать XDocument, который вы либо инициализируете с нуля для первого запуска, либо читаете из существующего файла в последующих прогонах.

Используя XDocument, вы можете манипулировать XML с помощью экземпляров XElement и XAttribute, а затем записать всю вещь в файл, если хотите ее сохранить.

+1

Есть ли какой-нибудь пример? Я не уверен, как с этим справиться, например, могу ли я загрузить xml-файл с помощью XDocument, а затем добавить новый элемент с помощью XElement? –

Смежные вопросы