Все элементы дублируются при добавлении нового элемента в XML

У меня есть такой XML-файл

<?xml version="1.0" encoding="utf-8"?>
<Root>
  <Teachers>
    <Teacher>Ali Javed</Teacher>
  </Teachers>
</Root>

Я добавляю новый элемент динамически, как это.

using (IsolatedStorageFileStream isoStream = new IsolatedStorageFileStream(TeachersXMLPath, FileMode.Open, IsolatedStorageFile.GetUserStoreForApplication()))
{
    string session = tb_session.Text.ToString();
    string subject = tb_subject.Text.ToString();
    DateTime? _datetime = val_timer.Value;
    String time = _datetime.Value.Hour + ":" + _datetime.Value.Minute;
    string crdthr = ((ListPickerItem)lst_credithr.SelectedItem).Content.ToString();
    string teacher = tb_teacher.Text.ToString();
    string classroom = tb_class.Text.ToString();
    string day_week = tb_day.Text.ToString();
    XDocument loadedData = XDocument.Load(isoStream);

    var tchElement = new XElement("Teacher");
    var tchr = loadedData.Root.Element("Teachers");
    tchr.Add(tchElement);
    tchElement.Value = teacher;
    loadedData.Save(isoStream);
    MessageBox.Show("Added");

}

Но вместо добавления элемента он добавляет, а также дублирует все элементы, как это.

 <?xml version="1.0" encoding="utf-8"?>
        <Root>
          <Teachers>
            <Teacher>teacher 1</Teacher>
          </Teachers>
    </Root>
<?xml version="1.0" encoding="utf-8"?>
        <Root>
          <Teachers>
            <Teacher>teacher 1</Teacher>
    <Teacher>teacher 2</Teacher>
          </Teachers>
    </Root>

1 ответ

Решение

Похоже, что здесь происходит, что вы открываете поток с FileMode.Openчтение до конца потока для чтения в документе XML, а затем запись в этот поток, начиная с этой точки. Вот почему вы столкнулись с этим дублированием.

Я предлагаю прочитать в файле как один доступ, а затем снова открыть файл с FileMode.Createтак, чтобы это было полностью перезаписано:

IsolatedStorageFile storageFile = IsolatedStorageFile.GetUserStoreForApplication();
XDocument loadedData;
using (IsolatedStorageFileStream isoStream = 
    new IsolatedStorageFileStream(TeachersXMLPath, FileMode.Open, storageFile))
{
    loadedData = XDocument.Load(isoStream);
}
using (IsolatedStorageFileStream isoStream = 
    new IsolatedStorageFileStream(TeachersXMLPath, FileMode.Create, storageFile))
{
    string session = tb_session.Text.ToString();
    string subject = tb_subject.Text.ToString();
    DateTime? _datetime = val_timer.Value;
    String time = _datetime.Value.Hour + ":" + _datetime.Value.Minute;
    string crdthr = ((ListPickerItem)lst_credithr.SelectedItem).Content.ToString();
    string teacher = tb_teacher.Text.ToString();
    string classroom = tb_class.Text.ToString();
    string day_week = tb_day.Text.ToString();

    var tchElement = new XElement("Teacher");
    var tchr = loadedData.Root.Element("Teachers");
    tchr.Add(tchElement);
    tchElement.Value = teacher;
    loadedData.Save(isoStream);
    MessageBox.Show("Added");
}
Другие вопросы по тегам