从 xml 中删除元素后,XDocument 在末尾添加一行

After deleting element from the xml, XDocument adds a line at the end

我正在使用以下代码从 xml 中删除元素;

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());
}

在删除属性为 "lname=name3" 的元素之前;

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

删除后;

<?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>

问题是什么?

看起来您的代码在原始 XML 的基础上修改了 XML。这就是为什么您会看到原始 XML 的提醒,它位于修改后的 XML 的范围之外:

lname="name4"/>
</channelLists>

也就是说,CreationCollisionOption.ReplaceExisting 在这种情况下可能更合适。