C# 删除XML元素节点

C# 删除XML元素节点,c#,xml,windows-phone-8,C#,Xml,Windows Phone 8,我想使用C#删除本地xml文件中的元素节点及其所有子元素 这是我的xml文件: <?xml version="1.0" encoding="UTF-8"?> <data> <cocktail name="43 Hedonism" id="14"> <name>43 Hedonism</name> <id>14</id> </cocktail> <cocktail na

我想使用C#删除本地xml文件中的
元素节点
及其所有
子元素

这是我的xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<data>
  <cocktail name="43 Hedonism" id="14">
    <name>43 Hedonism</name>
    <id>14</id>
  </cocktail>
  <cocktail name="B-52" id="4">
    <name>B-52</name>
    <id>4</id>
  </cocktail>
</data>
我想删除id属性为4的鸡尾酒元素

或者使用XPATH

xDoc.XPathSelectElement("//cocktail[@id='4']").Remove();

我建议您使用XDocument而不是XmlReader。那样的话,任务就容易多了

XDocument xdoc = XDocument.Load(filename);
xdoc.Root.Elements().Where(x => x.Attribute("id").Value == "4").Remove();
xdoc.Save(filename);

我只会将XmlReader用于大型xml文件。
使用XmlDocument或更好的XDocument搜索和操作xml文件要容易得多。

您的xml是否真的将数据作为属性和元素重复?是的,确实如此。但看起来,我仍在努力希望您在本次会话中没有参与鸡尾酒会(或者您也应该如此!)使用(IsolatedStorageFileStream=new IsolatedStorageFileStream(“bar.xml”,FileMode.Open,file)){var xDoc=XDocument.Load(stream,LoadOptions.None);xDoc.subjects(“鸡尾酒”).First(c=>c.Attribute(“id”).Value==“4”).Remove();//string newXml=xDoc.ToString();xDoc.Save(stream);}这不起作用。该节点仍在文件中。@JelleKerkstra我用您发布的xml尝试了上面的代码,它可以工作。这显示我运行时:@JelleKerkstra将断点放置到
xdoc.Save
,然后查看您有什么。和/或我已经在使用XDocument了?XmlReader用于将文件写入文本块以检查..哦,好的。我没有注意。对不起。不管怎样,代码是有效的。
xDoc.XPathSelectElement("//cocktail[@id='4']").Remove();
XDocument xdoc = XDocument.Load(filename);
xdoc.Root.Elements().Where(x => x.Attribute("id").Value == "4").Remove();
xdoc.Save(filename);