gpt4 book ai didi

c# - 使用 UWP 替换 XML 文件或删除 XML 文件中的元素

转载 作者:太空宇宙 更新时间:2023-11-03 23:06:41 25 4
gpt4 key购买 nike

我正在尝试使用 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:这解决了问题,但看起来不太好。任何关于改进的评论都会很棒。

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

最佳答案

这里的问题是您忘记将位置重置为当前流的开头,因此新的 XML 文档附加到原始文件。

为了解决这个问题,我们可以使用Stream.SetLength保存前的方法XDocument像下面这样流。在将当前流的长度设置为零时,它将清除当前流并自动将位置重置为开始。

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

stream.SetLength(0);

doc.Save(stream);
}
}

关于c# - 使用 UWP 替换 XML 文件或删除 XML 文件中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40962225/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com