<Category id=1>
<MyLines>
<Line GroupID="0" Cache="15" />
<Rect GroupID="0" Cache="16"/>
<Ellipse GroupID="0" Cache="16"/>
</MyLines>
我的XML文档包含许多类别标记。你能告诉我什么是获取MyLines的每个子元素的最佳方法,其中Cache = 16并删除它们。
我希望使用linq实现这一目标。
我正在尝试如下:
var q = from node in doc.Descendants("MyLines")
let attr = node.Attribute("Cache")
where attr != null && Convert.ToInt32(attr.Value) == 16
select node;
q.ToList().ForEach(x => x.Remove());
答案 0 :(得分:2)
我测试了以下代码:
string xml =
@"<Category id=""1"">
<MyLines>
<Line GroupID=""0"" Cache=""15"" />
<Rect GroupID=""0"" Cache=""16""/>
<Ellipse GroupID=""0"" Cache=""16""/>
</MyLines>
</Category>";
void Main()
{
var doc = XDocument.Parse(xml);
doc.Descendants("MyLines")
.Elements()
.Where(el => el.Attribute("Cache").Value == "16")
.ToList()
.ForEach(el => el.Remove());
doc.Root.ToString().Dump();
}
打印:
<Category id="1">
<MyLines>
<Line GroupID="0" Cache="15" />
</MyLines>
</Category>
问题是您在Cache
元素而不是MyLines
元素'子元素上寻找MyLines
属性。