2016-05-10 4 views
1

Ich lösche Element aus XML mit diesem Code unten;Nach dem Löschen eines Elements aus dem XML fügt XDocument am Ende eine Zeile hinzu

StorageFolder localFolder = Windows.Storage.ApplicationData.Current.LocalFolder; 
StorageFile MyFile = await localFolder.GetFileAsync("CustomTV.xml"); 
var stream4 = await MyFile.OpenStreamForReadAsync(); 
XDocument myXml2 = XDocument.Load(stream4); 
myXml2.Element("channelLists") 
       .Elements("channellist") 
       .Where(x => (string)x.Attribute("lname") == lnameselectedText) 
       .Remove(); 
using (var stream = await (await ApplicationData.Current.LocalFolder.CreateFileAsync("CustomTV.xml", CreationCollisionOption.OpenIfExists)).OpenAsync(FileAccessMode.ReadWrite)) 
{ 
    myXml2.Save(stream.AsStreamForWrite()); 
} 

vor dem Löschen des Elements mit Attribut "lname = name3";

<?xml version="1.0" encoding="utf-8"?> 
<channelLists> 
<channellist lname="name1" /> 
<channellist lname="name2" /> 
<channellist lname="name3" /> 
<channellist lname="name4" /> 
</channelLists> 

nach dem Löschen;

<?xml version="1.0" encoding="utf-8"?> 
<channelLists> 
<channellist lname="name1" /> 
<channellist lname="name2" /> 
<channellist lname="name4" /> 
</channelLists>lname="name4"/> //It adds all the time this line with last elements attribute. 
</channelLists> 

Was ist das Problem?

Antwort

0

Es sieht so aus, als würde Ihr Code modifiziertes XML über das ursprüngliche XML schreiben. Deshalb sollten Sie Erinnerung an den ursprünglichen XML sehen, die über die des modifizierten XML erstrecken sich:

lname="name4"/> 
</channelLists> 

Das heißt, CreationCollisionOption.ReplaceExisting könnte in diesem Fall besser geeignet sein.

+0

ich denke, das ist der Grund, aber diesmal bekomme ich "Zugriff verweigert" Warnung auf Debug. – user2542030

+0

Schließen Sie den Stream, der zum Laden der vorhandenen XML-Datei verwendet wurde, bevor Sie die geänderte XML-Datei schreiben. – har07

+1

Edit: Ich habe "stream4.Dispose();" Zeile nach "XDocument myXml2 = XDocument.Load (stream4);" und tat was @ har07 sagte, Problem gelöst. – user2542030