【发布时间】:2016-12-06 10:03:07
【问题描述】:
我正在尝试从使用 UWP 存储在存储文件中的 xml 文件中删除一个元素。我的问题是 doc.Save 命令仅将完整的文档添加到文件的末尾,而不是替换它。 我试图搜索 som 替换选项但没有成功。
所以问题实际上是两个部分: 1. 有没有更好的方法从 xml 文件中删除元素然后完全替换它? 2. 如果不是,我该如何替换文件?
public async Task DeleteSingleById(int id)
{
StorageFolder folder = ApplicationData.Current.LocalFolder;
StorageFile file = await folder.GetFileAsync("Data.xml");
Stream stream = await file.OpenStreamForWriteAsync();
using (stream)
{
XDocument doc = XDocument.Load(stream);
doc.Descendants("Companies").Elements("Company").FirstOrDefault(x => x.Elements("Id").Any(e => e.Value == id.ToString())).Remove();
doc.Save(stream);
}
}
更新 1: 这解决了问题,但看起来不太好。任何关于改进的 cmets 都会很棒。
public async Task DeleteSingleById(int id)
{
StorageFolder folder = ApplicationData.Current.LocalFolder;
StorageFile file = await folder.GetFileAsync("Data.xml");
Stream stream = await file.OpenStreamForWriteAsync();
XDocument doc = XDocument.Load(stream);
using (stream)
{
doc.Descendants("Companies").Elements("Company").FirstOrDefault(x => x.Elements("Id").Any(e => e.Value == id.ToString())).Remove();
}
await file.DeleteAsync();
file = await folder.CreateFileAsync("Data.xml", CreationCollisionOption.ReplaceExisting);
stream = await file.OpenStreamForWriteAsync();
using (stream)
{
doc.Save(stream);
}
}
【问题讨论】: