我不知道如何使用代码从我的XML文档中删除条目。我不知道如何开始这个部分,所以我需要一些帮助。
XML:
<?xml version="1.0" encoding="utf-8" ?>
<Movies>
- <Movie>
<Title>Seven</Title>
<LeadActors>Morgan Freeman, Brad Pitt</LeadActors>
<YearofRelease>1995</YearofRelease>
<Runtime>126</Runtime>
<Rating>R</Rating>
</Movie>
<Movie>
<Title>Sports</Title>
<LeadActors>me</LeadActors>
<YearofRelease>2044</YearofRelease>
<Runtime>126</Runtime>
<Rating>NC-17</Rating>
</Movie>
这是我添加条目的方式(我正在展示这个以显示我使用XML的方式,因为有许多不同的方法来完成任务)。目前还没有删除该项目的代码,因为我还不知道该怎么做:):
var mov = XElement.Load(@"Data.xml");
var newMov = new Movies()
{
title = txtTitle.Text.Trim(),
leadActors = txtActors.Text.Trim(),
yearofRelease = (int)nudYear.Value,
runtime = (int)nudRuntime.Value,
rating = (string)cmbRating.SelectedItem
};
//Adds the movie to Data.xml
mov.Add(new XElement("Movie",
new XElement("Title", newMov.title),
new XElement("LeadActors", newMov.leadActors),
new XElement("YearofRelease", newMov.yearofRelease),
new XElement("Runtime", newMov.runtime),
new XElement("Rating", newMov.rating)));
mov.Save(@"Data.xml");
//Adds the movie to the listbox
lstCollection.Items.Add(newMov as Movies);
UpdateList();
//Resets text box entries and focuses on title text box for next movie
txtTitle.Clear();
txtTitle.Focus();
txtActors.Clear();
我认为我会反过来,但无法弄明白。我真的被newMove.
中的mov.add
(会使用remove
?)部分搞砸了。
答案 0 :(得分:0)
这样的东西会从你的Xml中删除一个元素(请注意,这个简单的方法会删除所有具有此时相同属性的影片,如果你想要更细粒度,更准确的删除,你需要提供Xml中的唯一标识符:
var fileName = @"Data.xml";
var mov = XElement.Load(fileName);
var selectedMovie = (Movies)lstCollection.SelectedItem;
mov.Elements("Movie").Where (m => m.Element("Title").Value == selectedMovie.title && m.Element("LeadActors").Value == selectedMovie.leadActors && Convert.ToInt32(m.Element("YearOfRelease").Value) == selectedMovie.yearOfRelease && Convert.ToInt32(m.Element("Runtime").Value) == selectedMovie.runtime && m.Element("Rating").Value == selectedMovie.rating).Remove();
mov.Save(fileName);
对于“唯一标识符”,您可以跟踪电影ID字段并为您创建的每个Movies
对象设置该字段,然后在Xml中查找该ID。我将把这一点留给你。