2013-11-27 57 views
-2

我不知道如何從代碼中刪除我的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?)部分。

+0

這將是更有趣的看到你的XML然後圖片的應用程序:) –

+1

從XML集合中刪除項目的代碼在哪裏? – rae1

+0

@ Shades9323如果您希望我們幫助您從xml中刪除元素,那麼您應該向我們展示xml以及您用於從該文件中刪除元素的代碼。用於添加元素的應用程序圖像和代碼與您的問題無關 –

回答

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。我會留給你實施。

+0

那麼在你的例子中,我只能刪除硬編碼的內容?我如何提供一個唯一的標識符到我的XML?你不能刪除基於列表框中的位置?對不起,如果這些是愚蠢的問題。編程對我來說並不容易。 – Shades9323

+0

您必須提供所選列表框項目的標題。我會更新我的答案,以提供一個替代方案來創建一個唯一的ID,而不是要求您提供所選項目的所有值。 –

相關問題