Запись в существующий XML-файл без замены его содержимого (XmlWriter)

Я столкнулся со следующей проблемой,

Сначала я пишу в свой xml-файл следующим образом:

 XmlTextWriter writer = new XmlTextWriter("course.xml", null);
 writer.Formatting = Formatting.Indented;
 writer.WriteStartDocument();

 writer.WriteStartElement("Course");
 writer.WriteAttributeString("title", "Examle");
 writer.WriteAttributeString("started", "true");

 writer.WriteEndElement();
 writer.WriteEndDocument();
 writer.Close();

И вывод xml, который я получаю:

<?xml version="1.0"?>
<Course title="Example" started="true" />

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

XmlTextWriter writer = new XmlTextWriter("course.xml", null);
writer.Formatting = Formatting.Indented;
writer.WriteStartDocument();

writer.WriteStartElement("Course");
       writer.StartElement("Level");
              writer.StartElement("Module");
              writer.EndElement();
       writer.EndElement();
writer.WriteEndElement();

writer.WriteEndDocument();
writer.Close();

И вывод xml:

<?xml version="1.0"?>
<Course>
    <Level>
        <Module>
        </Module>
    </Level>
</Course>

Таким образом, он заменяет мои исходные данные и все атрибуты в теге курса. Поэтому мне нужен способ, при котором он не заменяет данные, а вместо этого добавляет их в существующие теги.


person Ilja    schedule 16.05.2014    source источник
comment
К вашему сведению, вы не должны использовать new XmlTextReader() или new XmlTextWriter(). Они устарели, начиная с .NET 2.0. Вместо этого используйте XmlReader.Create() или XmlWriter.Create().   -  person John Saunders    schedule 16.05.2014


Ответы (2)


XML-файлы — это просто последовательные текстовые файлы. Они не являются базой данных или файлом с произвольным доступом. Невозможно просто написать в середине из них.

person John Saunders    schedule 16.05.2014
comment
+1. Обратите внимание, что в отличие от форматов CSV (или других построчных) форматы нельзя даже добавить в XML-файл из-за необходимости соответствия закрывающим тегам. Можно рассмотреть [фрагменты документа](www.bing.com/search?q=c%23+xml+document+fragment) - XML ​​без самого верхнего узла, чтобы разрешить добавление. - person Alexei Levenkov; 16.05.2014

Я бы рекомендовал проанализировать весь XML-документ в памяти, добавить новые данные, а затем снова записать весь документ.

person LVBen    schedule 16.05.2014