1
我想从使用UWP的存储文件中存储的xml文件中删除元素。我的问题是,doc.Save命令只会将完整的文档添加到文件的最后而不是替换它。 我试图搜索索姆替换选项,但没有成功。使用UWP替换XML文件或删除XML文件中的元素
所以这个问题实际上是两个部分: 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: 这解决了这个问题,但它并不好看。任何有关改进的意见都会很棒。
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);
}
}
其实这并没有工作。它只在文件的开始处写入所有内容,并在最后留下任何未被覆盖的东西。 –
@SamuelWahlberg是的,只有重新设置位置才能解决问题。在这里,我们需要清除当前流以进行重写。我已经更新了我的答案,现在应该可以开展工作。感谢您的支持。 ;) –
更新解决了问题,谢谢! –