使用XML删除特定的Parent和它的子项

时间:2012-10-12 01:24:43

标签: c# xml parent children

  

可能重复:
  How to delete xml element with C#?

说我有这样的XML文档:

<doc>
     <car>
         <color>Red</color>
         <size>compact</size>
     </car>
     <car>
         <color>Yellow</color>
         <size>mid-size</size>
     </car>
</doc>

我想删除属性为黄色的汽车的整个条目,因此xml文件变为

<doc>
     <car>
         <color>red</color>
         <size>compact</size>
     </car>
</doc>

我该怎么做?我搜索过高低,找到了解决方案,但遗憾的是没有找到c#。

3 个答案:

答案 0 :(得分:1)

您可以将Linq用于XML:

  var yellowCars = from car in xDoc.Elements("doc").Elements("car") 
                     where car.Element("Color").Value == "Yellow" 
                     select car;

    foreach (var car in yellowCars)
    {
        car.Remove();
    }

  xDoc.Save();

答案 1 :(得分:0)

我如何总是处理这种情况:我将整个文件加载到内存中,您可以通过将xml反序列化为c#类或xmlnode结构来完成此操作,有很多教程。后面我对列表或数组进行任何编辑,然后重新整理并覆盖整个文件。提供您的文件没有数百条记录应该没有明显的性能问题

答案 2 :(得分:0)

using System.Xml.XPath;

...

var doc = XDocument.Parse(xml);
var list = new List<XElement>();
foreach (var element in doc.XPathSelectElements(@"/doc/car[color='Yellow']")) {
    list.Add(element);
}
foreach (var element in list) element.Remove();

更新:因此在迭代时不会改变集合。