How to use this tool
- Select exactly two UTF-8 XML files, each up to 1 MB. Check their filenames and choose which selected file is old and which is new.
- Choose whether to compare whitespace-only text nodes. The default keeps all text; xml:space="preserve" is respected in either mode.
- Run the comparison, inspect the counts and preview, then download the JSON report. Correct malformed or unsupported input before trying again.
Check the built-in example
The fictional invoice demo keeps invoice number DEMO-001 and currency EUR. Its amount changes from 10.00 to 12.50. The new document also uses a different namespace prefix for the same namespace URI. The report contains exactly one changed text record, with before="10.00" and after="12.50". The prefix substitution alone is ignored. This is a comparison of XML values, not a payment calculation or an invoice-validity decision.
Processing method
A namespace-aware saxes parser builds each document tree in a worker. Element and attribute names are identified by namespace URI and local name, consistent with the linked W3C namespace specification. Attribute order and unused namespace declarations are ignored. The comparator records text, attribute values, names and child order at paths based on names and sibling positions. Slashes and tildes inside path names are escaped. CDATA and ordinary character data are combined as text. Added, removed and changed records are counted separately; inserting a node can create several records rather than one business-level change.
Reference: W3C: Namespaces in XML 1.0
What the result leaves out
Each file is limited to 1 MB, 20,000 counted nodes or attributes and depth 64. Very long namespace names and generated paths are restricted: URI 512 characters, local name 256, individual path 4096 and total path text 4 MB per file. Processing stops after 20 seconds. The preview shows 100 differences and JSON retains up to 1000, with values clipped at 2000 characters and truncation flags. Child matching is positional; there is no ID-based matching or move detection. Comments, processing instructions and XML declarations are ignored. Attribute and text values remain literal, including values that happen to contain namespace-qualified names. DTD and external entities are unsupported. This is not XSD, signature, SEPA or XRechnung validation.
Checking local processing
Both source files stay on your device. The site serves program assets, but namespace identifiers and document contents do not trigger remote XML or schema downloads. Inspect Network while comparing the demo to confirm that there is no source upload. Cancel terminates the worker. Reset clears the selection and current report. Downloaded JSON remains on your device and can contain filenames and excerpts from both inputs.
Common questions
Does no difference mean byte-identical files?
No. Prefixes, attribute order and ignored content can differ while the selected structural records compare equal.
Should I ignore whitespace-only text?
Choose deliberately. Such text can matter in mixed content. The default compares it, and xml:space="preserve" prevents its removal.
Will one inserted element always count as one change?
No. The report counts structural records, including names and child-order information, rather than business events.