C# 在Windows应用商店应用程序(Windows 8 Metro)中删除元素后保存xDocument
首先,我想再次提及我的平台是windows应用商店应用程序(因为有些用户认为我谈论的是桌面环境,并将我的问题作为重复主题关闭)。我有一个xml文档,我通过以下方法删除了一个元素:C# 在Windows应用商店应用程序(Windows 8 Metro)中删除元素后保存xDocument,c#,xml,windows-8,linq-to-xml,windows-store-apps,C#,Xml,Windows 8,Linq To Xml,Windows Store Apps,首先,我想再次提及我的平台是windows应用商店应用程序(因为有些用户认为我谈论的是桌面环境,并将我的问题作为重复主题关闭)。我有一个xml文档,我通过以下方法删除了一个元素: public async void DeleteDocument(Word deletedItem) { StorageFile storageFile = await _fileloc.StorageFile(); var file = await storageFile.OpenAsync(FileAc
public async void DeleteDocument(Word deletedItem)
{
StorageFile storageFile = await _fileloc.StorageFile();
var file = await storageFile.OpenAsync(FileAccessMode.ReadWrite);
Stream inStream = file.AsStreamForWrite();
XDocument xDoc = XDocument.Load(inStream);
xDoc.Descendants("Word").Single(p =>((Guid)p.Element("Id")).Equals(deletedItem.Id)).Remove();
xDoc.Save(inStream);
}
元素已成功删除,但当我保存xDocument时,新xDocument会像下面这样附加到结束xml文件中
<XML ....>
<Word id="1">
<Item x="...."/>
<Item x="...."/>
</Word>
<Word id="2">
<Item x="...."/>
<Item x="...."/>
</Word>
</XML><XML ....>
<Word Id="2">
<Item x="...."/>
<Item x="...."/>
</Word>
</XML>
请给我建议,谢谢你的帮助
更新:
在Jim O'Neil提出建议后,保存的文档如下
<XML ....>
<Word id="1">
<Item x="...."/>
<Item x="...."/>
</Word>
x="...."/>
<Item x="...."/>
</Word>
</XML>
x=“…”/>
您已打开文件进行读/写访问,加载XML时,文件指针现在位于文件末尾。因此,当您保存时,它开始写入文件指针所在的任何位置—文件的末尾
看看这是否更有效:
var file = await storageFile.OpenAsync(FileAccessMode.ReadWrite);
using (Stream inStream = file.AsStreamForWrite())
{
XDocument xDoc = XDocument.Load(inStream);
xDoc.Descendants("word").Remove();
inStream.Seek(0, SeekOrigin.Begin);
xDoc.Save(inStream);
await inStream.FlushAsync();
}
这并不完全是您的代码(我无法调用Single进行编译),但您可以看到模式;就是打电话给。我不明白?我看到您更新了XML,使之与查找“Word”的代码相匹配,但这不是“重要”部分。它现在是否正在与“寻找”通话一起工作?