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是的,只有重新設置位置才能解決問題。在這裏,我們需要清除當前流以進行重寫。我已經更新了我的答案,現在應該可以開展工作。感謝您的支持。 ;) –
更新解決了問題,謝謝! –