说我有这样的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#。
答案 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();
更新:因此在迭代时不会改变集合。