C# 在Windows应用商店应用程序(Windows 8 Metro)中删除元素后保存xDocument

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

首先,我想再次提及我的平台是windows应用商店应用程序(因为有些用户认为我谈论的是桌面环境,并将我的问题作为重复主题关闭)。我有一个xml文档,我通过以下方法删除了一个元素:

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”的代码相匹配,但这不是“重要”部分。它现在是否正在与“寻找”通话一起工作?