说我有这个XML文件:
<Stops>
<Stop>
<ID>1022</ID>
<UserDescription>Test</UserDescription>
</Stop>
<Stop>
<ID>1053</ID>
<UserDescription>Test1045</UserDescription>
</Stop>
</Stops>
我想删除ID等于值的整个节点。
所以,例如用1022删除节点应该给出:
<Stops>
<Stop>
<ID>1053</ID>
<UserDescription>Test1045</UserDescription>
</Stop>
</Stops>
到目前为止我一直在尝试的代码(Windows Phone中的C#)。它似乎变形并使XML不可读。我不知道我哪里出错...
using (isoStore)
{
XDocument doc;
using (IsolatedStorageFileStream isoStream = new IsolatedStorageFileStream(StopFileName, FileMode.Open, isoStore))
{
doc = XDocument.Load(isoStream, LoadOptions.None);
doc.Descendants("Stop")
.Where(x => (string)x.Element("ID") == "1022").Remove();
doc.Save(isoStream);
}
}
答案 0 :(得分:0)
我认为您的错误是使用相同的流读取和保存。
如果您查看自己的代码,请从文件中加载xml:
doc = XDocument.Load(isoStream, LoadOptions.None);
然后保存到同一个流:
doc.Save(isoStream);
所以你最终得到一个看起来像这样的XML文件
<Stops>
<Stop>
<ID>1022</ID>
<UserDescription>Test</UserDescription>
</Stop>
<Stop>
<ID>1053</ID>
<UserDescription>Test1045</UserDescription>
</Stop>
</Stops>
<Stops>
<Stop>
<ID>1053</ID>
<UserDescription>Test1045</UserDescription>
</Stop>
</Stops>
拥有2个根元素确实会导致“意外的XML声明”
我会更改你的代码,所以首先你读取文件,然后创建一个新文件/覆盖现有文件。
using (isoStore)
{
XDocument doc;
using (IsolatedStorageFileStream isoStream = new IsolatedStorageFileStream(StopFileName, FileMode.Open, isoStore))
{
doc = XDocument.Load(isoStream, LoadOptions.None);
}
doc.Descendants("Stop")
.Where(x => (string)x.Element("ID") == "1022").Remove();
using (IsolatedStorageFileStream isoStream = new IsolatedStorageFileStream(StopFileName, FileMode.Create, isoStore))
{
doc.Save(isoStream);
}
}