示例#1
0
        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);
        }
示例#2
0
        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);
        }