Все элементы дублируются при добавлении нового элемента в 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");
}