Я пытаюсь создать небольшой XML-редактор. Он загружает XML-файл, отображает все названия книг (в моем примере файла) в списке. При нажатии на заголовок отображается вся информация о книге в текстовом поле. Если информация должна быть изменена, пользователь может нажать кнопку «Изменить», и теперь информация может быть отредактирована в новом текстовом поле. Наконец, изменения сохраняются и оба текстовых поля очищаются - и, если возможно, заголовки из недавно обновленного XML-файла должны быть перезагружены в список (screenshot).Редактировать и сохранять элемент в файл XML с помощью Linq
Операции со списком и первым текстовым полем прекрасно работают, благодаря this post. Проблема возникает, когда я пытаюсь отправить значения XML во второе текстовое поле. Все изменения не сохраняются или, если они есть, остальная часть файла XML исчезает.
Я полагаю, что решение может состоять в том, чтобы добавить информацию (и ее изменения) в новый элемент XML, а затем удалить старый, но до сих пор, и я уже некоторое время пытался, я просто могу Не поймите, как это сделать. Это по той же причине, и я знаю, что это плохой стиль, мой код останавливается, когда проблема начинается. Я был бы рад, если бы кто-то помог мне.
Мой пример XML:
<?xml version='1.0'?>
<!-- This file represents a fragment of a book store inventory database -->
<books>
<book genre="autobiography">
<title>The Autobiography of Benjamin Franklin</title>
<author>Franklin, Benjamin</author>
<year>1981</year>
<price>8.99</price>
</book>
<book genre="novel">
<title>The Confidence Man</title>
<author>Melville, Herman</author>
<year>1967</year>
<price>11.99</price>
</book>
<book genre="philosophy">
<title>The Gorgias</title>
<author>Plato</author>
<year>1991</year>
<price>9.99</price>
</book>
</books>
И мои .cs
private void btnLoadXML_Click(object sender, EventArgs e)
{
var xmlDoc = XDocument.Load("books03.xml");
var elements = from ele in xmlDoc.Elements("books").Elements("book")
where ele != null
select ele;
bookList = elements.ToList();
foreach (var book in bookList)
{
string title = book.Element("title").Value;
listBox1.Items.Add(title);
}
}
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
var book = bookList[listBox1.SelectedIndex];
textBox1.Text =
"Title: " + book.Element("title").Value + Environment.NewLine +
"Author: " + book.Element("author").Value + Environment.NewLine +
"Year: " + book.Element("year").Value + Environment.NewLine +
"Price: " + book.Element("price").Value;
}
private void btnEdit_Click(object sender, EventArgs e)
{
textBox2.Visible = true;
btnSaveClose.Visible = true;
}
}
Но как я могу осуществить это в моем коде? Добавляя его под «btn_edit()» каким-то образом? – Cunctator03