private XElement DoCreateElement(XElement target, bool throwOnError, XDiffOptions options) { var t = target; var parent = NewestElement.Attribute("__parent"); if (null != parent) { t = FindByParent(target, new ParentCondition(parent.Value)); } if (null == t) { throw new Exception("cannot find target parent elment " + parent); } if (options.IsHierarchy) //мы должны порождать элементы без дочек во избежание дублирования, дочки накатятся сами { var header = new XElement(NewestElement); header.Elements().Remove(); var p = header.Attribute("__parent"); if (null != p) { p.Remove(); } t.Add(header); } else { t.Add(new XElement(NewestElement)); } return(target); }
private XElement DoCreateAttribute(XElement target, bool throwOnError, XDiffOptions options) { var e = Find(target, BasisElement, options); if (null == e) { if (throwOnError) { throw new Exception("cannot find target for " + BasisElement); } return(target); } if (null == NewestAttribute) { foreach (var a in NewestElement.Attributes()) { e.SetAttributeValue(a.Name, a.Value); } } else { e.SetAttributeValue(NewestAttribute.Name.LocalName, NewestAttribute.Value); } return(target); }