当元素名称和所有属性名称和值与输入元素匹配时,我需要替换XElement层次结构中的节点的内容.(如果没有匹配项,则可以添加新元素.)
例如,如果我的数据如下所示:
one two three four five
我想在使用此输入调用方法时找到最后一个元素:
new value
该方法应该没有硬编码元素或属性名称 - 它只是将输入与数据匹配.
这将使任何给定元素与精确标记名称和属性名称/值对匹配:
public static void ReplaceOrAdd(this XElement source, XElement node) { var q = from x in source.Elements() where x.Name == node.Name && x.Attributes().All(a =>node.Attributes().Any(b =>a.Name==b.Name && a.Value==b.Value)) select x; var n = q.LastOrDefault(); if (n == null) source.Add(node); else n.ReplaceWith(node); } var root = XElement.Parse(data); var newElem =XElement.Parse("new value "); root.ReplaceOrAdd(newElem);