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)); }
/// <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)); }