Пример #1
0
        public DiffNode CompareWith(RealNode node)
        {
            //swap nodes to be sure that raw element with default action = Added comes first
            //since we are looking for a comparison against a current version
            if (DefaultAction == DiffAction.Removed)
            {
                return(node.CompareWith(this));
            }

            var contentChanges = AttributeChanges(node)
                                 .Concat(ValueChanges(node))
                                 .Concat(ChildsChanges(node));

            return(new DiffNode(Raw, contentChanges));
        }
Пример #2
0
        /// <summary>
        /// Compare <paramref name="resultElement"/> with a <paramref name="sourceElement"/>
        /// Comparison is made only for XElement, XAttribute or XText elements
        /// All other xml elements such as XComment, CDATA etc would be ignored
        /// </summary>
        /// <param name="sourceElement">Source element</param>
        /// <param name="resultElement">Result element</param>
        /// <returns>
        /// Return value is build upon <paramref name="resultElement"/>
        /// In case of different root tags InvalidOperationException is throws
        /// </returns>
        public DiffNode Compare(XElement sourceElement, XElement resultElement)
        {
            if (sourceElement == null)
            {
                throw new ArgumentNullException(nameof(sourceElement));
            }
            if (resultElement == null)
            {
                throw new ArgumentNullException(nameof(resultElement));
            }
            if (sourceElement.Name != resultElement.Name)
            {
                throw new InvalidOperationException("Root elements are different");
            }

            RealNode parsedSource = Parse(sourceElement, DiffAction.Removed);
            RealNode parsedResult = Parse(resultElement, DiffAction.Added);

            return(parsedResult.CompareWith(parsedSource));
        }