如何使用删除按钮从XML文档中删除条目?

时间:2013-11-27 19:07:52

标签: c# xml

我不知道如何使用代码从我的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?)部分搞砸了。

1 个答案:

答案 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。我将把这一点留给你。