There are probably many tools that do this, one of them is Xml Diff and Path, via MS XML downloads
The Microsoft XML Diff and Patch
utility can be used for comparing two
XML documents and then patching the
original document with the
differences, to create a final
document. The utility can detect
structural changes (such as the move
of an XML subtree) and can create an
Xml Diff Language Diffgram (XDL
diffgram or just diffgram) that
describes the differences between the
two XML documents. The diffgram can
then be used to display these
differences or perform a patch using
the XML Patch tool.
XML Diff performs XML-based comparison
of the XML documents, as opposed to a
common lexical comparison. Therefore,
it
Ignores the order attributes. Ignores
insignificant white spaces. Does not
differentiate between an empty element
() and element with no content ().
Does not care about the document
encoding.
The tools are usable via cmd line and API.