Почему мой код не удаляет указанный элемент c в файле XML - PullRequest
1 голос
/ 15 апреля 2020

Итак, чтобы выучить c# Я создавал программу, которая отображает информацию, которую мне нужно переименовать, и дает мне возможность изменять и удалять их. Я дошел до стадии создания кнопки, которая удаляет элемент xml из файла в зависимости от того, где он находится. Проблема в том, что только первая кнопка удаляет что-либо, и она удаляет все. Мне было интересно, что я сделал не так. Кто-нибудь может помочь, пожалуйста?

Извините, что это грязно.

String Buttonname = (sender as Button).Name;
int RowCount = Int16.Parse(Buttonname.Remove(0, 9));

string appDataPath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
string dataPath = Path.Combine(appDataPath, "Remembrall 2.0");
string EventslistFullPath = Path.Combine(dataPath, "Events.xml");

Label Labelname = (Label)this.Controls.Find("DetailsLbl"+RowCount, true)[0];
string Detailtext = Labelname.Text;
//gets the text from a dynamicaly generated textbox

MessageBox.Show (Detailtext);

for (int z = 0; z < Table.ColumnCount; z++)
{
    Control con = Table.GetControlFromPosition(z, RowCount);
    Table.Controls.Remove(con);
    con.Dispose();
}

XDocument EventDoc = XDocument.Load(EventslistFullPath);

label1.Text = Detailtext;

EventDoc.Descendants("Events").Where(ele => ele.Element("Event").Value == Detailtext).Remove();
//Deletes the element based off the value of the text.


EventDoc.Save(EventslistFullPath); 

1 Ответ

0 голосов
/ 15 апреля 2020

В строке

EventDoc.Descendants("Events").Where(ele => ele.Element("Event").Value == Detailtext).Remove();

написано "найти все <Events> узлы в документе события; для каждого посмотрите, соответствует ли первый <Event> узел в нем Detailtext; если это так, удалите что <Events> ". Вы вероятно имели в виду:

EventDoc.Descendants("Events").Elements("Event").Where(evt => evt.Value == Detailtext).Remove();

, который говорит: «найдите все <Events> узлы и для каждого найдите все <Event> узлы под ним; удалите любой из этих <Event>, которые match Detailtext ".

Обратите внимание, что это по-прежнему означает, что дубликаты становятся немного рискованными, то есть, если у нескольких узлов есть значение "abc", нажатие на кнопку удаления на любом из "abc" удалит все из них ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...