Have a look at File comparison tools, from which I am using WinMerge. It has an ability to compare XML documents (you may wish to enable DisplayXMLFiles prefilter for v2.14.0 or PrettifyXML for v2.16.x).
DisplayXMLFiles.dll - This plugin pretty-prints XML files nicely by inserting tabs and line breaks. This is useful for XML files that do not have line returns in convenient locations.
Note for v2.16.x
The plugin PrettifyXML is supplied with the software package. It can be activated as following:
- Make sure that Plugins β Plugin Settings β Enable plugins is enabled.
- Then use either File β Recompare As β Prettify XML or Plugins β Scripts β Prettify XML
For those who wish to play with deprecated DisplayXMLFiles, he needs to download e.g. winmerge-2.16.14-full-src.7z and copy Plugins\dlls\X64\DisplayXMLFiles.dll to WinMerge\MergePlugins\.

See also my feature comparison table.
Answer from dma_k on Stack OverflowVideos
Have a look at File comparison tools, from which I am using WinMerge. It has an ability to compare XML documents (you may wish to enable DisplayXMLFiles prefilter for v2.14.0 or PrettifyXML for v2.16.x).
DisplayXMLFiles.dll - This plugin pretty-prints XML files nicely by inserting tabs and line breaks. This is useful for XML files that do not have line returns in convenient locations.
Note for v2.16.x
The plugin PrettifyXML is supplied with the software package. It can be activated as following:
- Make sure that Plugins β Plugin Settings β Enable plugins is enabled.
- Then use either File β Recompare As β Prettify XML or Plugins β Scripts β Prettify XML
For those who wish to play with deprecated DisplayXMLFiles, he needs to download e.g. winmerge-2.16.14-full-src.7z and copy Plugins\dlls\X64\DisplayXMLFiles.dll to WinMerge\MergePlugins\.

See also my feature comparison table.
I wrote and released a Windows application that specifically solves the problem of comparing and merging XML files.
Project: Merge can perform two and three way comparisons and merges of any XML file (where two of the files are considered to be independent revisions of a common base file). You can instruct it to identify elements within the input files by attribute values, or the content of child elements, among other things.
It is fully controllable via the command line and can also generate text reports containing the differences between the files.

Hello, is there a free tool for xml files comparison? I need to compare two files to check out is there any differences in the new one.
Technically, XMLs are different
- if they have whitespaces or not
- if the order is different
- if they have comments or not
- if they have processing instructions or not
- if their encoding is different
- if their namespaces are different
but of course you can decide to ignore that or not, based on the semantic information an XML does not have.
Microsoft has developed the XML Diff and Patch tool for this purpose and you can integrate it in your own applications.
Note: the tool installs as "SQLXML Bulkload in .NET Code Sample" and comes with a Visual Studio solution XmlDiffView.sln that you need to compile yourself. Some basic programming knowledge in C# and Visual Studio Community Edition should be ok.
However, as mentioned in one of the answers on Stack Overflow, it has been compiled and made available on Bitbucket.
After that it comes with a UI that let's you choose the various XML comparison options:

When I apply it to the 2 XMLs of your questions, it throws an exception. That is because of the namespaces which are not defined. After removing the namespaces, it says:

Focusing on the part that moved sections should be reported as no difference made me think of https://semanticmerge.com/, which doesn't compare XML-files, but C# and C code. And as it understand those languages it is able to display if code has moved and not changed.
This leads to an alternative approach for this question: Could it be possible to translate the XML into C# classes, and then do a semantic merge on the resulting code?
One possible approach, if this tool is not written already, could be to translate each and every element to classes, and each attribute (and body texts) to a string property within that class. If you want to ignore namespaces, then let your translator remove them in the translation process.
I translated the XML example given as proof of concept and got the following:
class soapenv__Body {
class mes__GetItem {
class mes__ItemShape {
class typ__BaseShape {
string body="IdOnly";
}
class typ__BodyType {
string body="Textus";
}
class typ__AdditionalProperties {
class typ__FieldURI {
string FieldURI="item:Subject";
}
class typ__FieldURI {
string FieldURI="item:Categories";
}
}
}
class mes__ItemIds {
class typ__ItemId {
string Id="AAMYAAA=";
}
}
}
}
Then I switched the mes:ItemIds and mes:ItemShape and changed the text to Textus. Compared the following two files in Semantic Merge and got the following image:

In this image one can see the move, indicated by the M icon, and the change in text indicated by the C icon. Lines indicates where the different parts have moved/changed, and it possible to actually see the differences if they exist.
Note that Semantic Merge even though understanding C# code, isn't to strict on the identical class names of typ__FieldURI, which could be a nice features as XML can contain multiple nodes with the same name.
Summa summarum: Semantic Merge can correctly identify the XML as identical (or not) even though elements move, if you can convert the XML into a C# class structure.
To summarise, addressing your requirements:
- Comparison tool that can compare XSD files: Yes
- Can identify changes in structure, not just content of XSD files: Yes
- Can ignore expected changes: Yes
- Orderless comparisons; avoiding false positives from moved elements: Yes
- Compare all files at once: Yes, through batch processing
- Produce a report with the details: Unclear what is needed here
XML Compare, developed by DeltaXML, is a structurally aware XML comparison tool that is able to identify change in both the structure and the content of XML files, including XSD.
In instances where elements have moved in the file but the order of said elements is not significant to the comparison, XML Compare has built in functionality for Comparing Orderless Elements. This can be customised extensively using XSLT as needed.
When you are expecting changes that do not need to be identified as change, you can use XML Compare's built in Ignoring Changes functionality which can again be customised using XSLT.
For bulk processing of your files, although XML Compare only compares files 1-to-1, it can be run via the command line, REST API and Java API. This means that by writing a batch file to queue up comparison operations, or if you use the REST API the comparison operations will be queued automatically.
Finally, to address your need for a report summarising the results, this depends on what you mean. XML Compare is capable of producing HTML reports from diff outputs that highlight changes in-line or side-by-side. It sounds however like you may be looking for a more statistical report on the results of the comparisons, for which XML Compare does not currently have a facility. It is worth noting however that the diff outputs produced by XML Compare are valid XML, and can be readily processed to identify the change attributes in the file.
Disclosure: I am an employee of DeltaXML.
That's quite a challenge, because so many differences are possible: you may have to make compromises depending on what you actually encounter. (For example, you may or may not need to bother with named model groups, depending on whether either of the schemas you are comparing actually uses them. Most schemas don't.)
If I were doing this (and of course I'm biased towards using my own tools) I would start by using Saxon's schema validator to generate SCM (schema component model) files for both schemas. This will do a fair bit of normalization, e.g. handling the difference between inline types and references to named global types. I would then write an XSLT stylesheet to do further normalization on the SCM files, for example sorting components into a canonical order, sorting enumeration values, and so on; also, eliminating the parts of the SCM files that aren't relevant, such as finite state machine details. I would then probably write a custom XSLT comparison module to compare the two normalized SCM files (along the lines of https://dvcs.w3.org/hg/xslt30-test/file/tip/runner/compare.xsl which is used for comparing XSLT test results) - the key being that you don't just want a boolean answer saying whether they are the same or different, you want to highlight the differences. Alternatively you could use fn:deep-equal to test whether they are the same, and then using a visual diff tool to examine them side-by-side if not.
Is there a tool that will compare two XML files to see if they match? A search found tools that appear to do text comparisons and have the ability to pretty-print the files being compared. I don't want that. I want to know that the two files contain the same elements, that each element contains the same subelements, that each element contains the same attributes, and that each attribute contains the same values.