Installation & Quickstart¶
Install¶
Requires Python 3.11+ (uses the standard-library tomllib). The tool has
no third-party dependencies.
Your first diff¶
The simplest run compares two files you already have — no options, no concepts:
Open report.md: a summary table of every element that differs, then an
N-way detail table — one column per file. Pass more files for more columns.
The exit code is 1 when a difference is found (useful in CI), 0 otherwise.
Try it with zero setup
Cloned the repo? Run it on the bundled synthetic examples:
Theexamples/ folder ships in the repo, not in the pip package.
Inputs: files and/or directories¶
xmldiffreport accepts files and/or directories as positional arguments:
Each file is a source; a unit (e.g. a Control-M SMART_FOLDER) is
reported when it appears in 2+ files and differs. Full guide:
Inputs & file layout.
Choosing a recipe¶
A recipe teaches the engine about one XML dialect. Built-ins:
--recipe controlm— BMC Control-M exports.--recipe maven-pom— Mavenpom.xmldependency/plugin drift.--recipe junit— JUnit/xUnit test reports.--recipe sitemap—sitemap.xml.--recipe generic— no dialect knowledge (the default).
You can also pass a path to your own .toml — see
Writing recipes.
CLI options¶
xmldiffreport [paths...] [-r RECIPE] [-o OUT] [-f FORMAT]
paths .xml files and/or directories (directories scanned recursively)
-r, --recipe built-in recipe name or path to a .toml (default: generic)
-o, --out output file (default: reports/YYYYMMDD_HH_MM.<ext>)
-f, --format output format: md (default) or html
Output formats¶
The report is rendered through a pluggable strategy, so the same diff can be emitted in different formats:
xmldiffreport examples/controlm -r controlm -f html -o report.html
# the format is also inferred from the -o extension (.html → html)
Built-in formats: md (Markdown, default) and html (a standalone page,
no external assets). Adding more (e.g. JSON) is a single class — see
Contributing.
Next: How it works.