XML to Excel Converter
Nothing leaves your browser — parsing, preview, and export all run locally in JavaScript.
Why this XML to Excel converter runs entirely client-side
The XML converters that currently rank — conversiontools.io, dataconverter.io, coolutils.com, tableconvert.com, tinywow.com — mostly work by uploading your file to a server, converting it there, and handing back a download link. XML files are often API responses, exported records from an ERP or CRM, or data feeds that contain names, prices, or account details — not something you necessarily want sitting on a third-party server, even briefly.
This converter never sends your file anywhere. A small XML parser runs inside the page itself, in JavaScript, and builds the spreadsheet in memory before handing it to you as a download. exceltool.io is the one competitor we found making the same client-side claim explicitly — we think it should be the default, not the exception, for a tool that touches your data.
How it works — and how record detection works
XML doesn't have a built-in concept of "rows" the way JSON arrays or CSV do — a data export is really a tree, with the actual records buried at some depth as repeated sibling elements (every <book> under <catalog>, every <employee> under <company><staff>, and so on). This tool scans the whole tree, finds every element name that repeats as a sibling somewhere, and picks the one closest to the document root as the default record — the same logic a person would use scanning the file by eye.
If the auto-detected element isn't the one you actually want (some files have more than one plausible repeating tag, like both <book> and inner <review> elements), a dropdown lists every candidate found, with a count next to each, so you can switch with one click and the preview updates instantly.
Once a record element is chosen, its attributes become columns named @attr (e.g. a book with id="bk101" becomes a column @id with value bk101), and its child elements are flattened the same way the JSON converter handles nested objects: dot notation for a single child, and semicolon-joined values when a child tag repeats inside one record (multiple <tag> elements inside a <tags> wrapper, for instance).
What's included
Auto-detected column types applied as real Excel number/date formats, a frozen header row, and an auto-filter — the same defaults as the JSON to Excel converter, so a downloaded file is ready to sort and filter immediately. Files up to roughly 50MB are supported. Export as .xlsx or plain .csv.
The parser handles namespaced tags, quoted attributes, CDATA sections, and comments in the source XML. It's a hand-built parser rather than a wrapper around the browser's DOMParser, chosen specifically so the exact same conversion logic can be automatically tested — see the note on our methodology page if you're curious how our tools are validated before shipping.
Limitations, and when to reach for something else
This tool targets well-formed, reasonably structured XML — a data export, an RSS/Atom-style feed, an API dump. It doesn't validate against a DTD or XSD, and highly irregular or deeply mixed-content XML (prose text interleaved with markup, like a formatted document rather than a data file) won't flatten into a clean table, because that's not really tabular data to begin with.
If your source is JSON rather than XML, use the JSON to Excel converter below — it applies the same flattening conventions. If you need to compare two versions of a spreadsheet rather than convert a single XML file, use Compare Spreadsheets.
Need a spreadsheet built to run your business, not just hold data?
These converters get your data into a spreadsheet. Our templates go further — dashboards, automations, and data validation built in, tested to the cent, in matching Excel and Google Sheets versions.
Frequently asked questions
Does this tool upload my XML file anywhere?
No. Parsing and the Excel/CSV export both happen in your browser with JavaScript. Nothing is sent to a server, and the tool keeps working even if you go offline after the page has loaded.
How does it know which element is a 'record'?
It scans the whole document for element names that repeat as siblings under the same parent, and defaults to the one closest to the root — usually the correct choice for a typical data export. Every candidate it found is listed in a dropdown with a count, so you can pick a different one if needed.
What happens to XML attributes?
Each attribute on the chosen record element becomes its own column, prefixed with @ (an id="bk101" attribute becomes column @id). Attributes on nested child elements get the same treatment, prefixed with the child's name.
Can it handle nested elements, not just flat attribute lists?
Yes. A single nested child element is flattened into a dot-notation column (price.currency for a <price currency="USD">). If a child tag repeats inside one record — several <tag> elements inside a <tags> wrapper — their text values are joined into one cell with semicolons, matching how the JSON converter handles arrays.
What's the largest XML file this supports?
Roughly 50MB. Parsing and workbook-building run in your browser's JavaScript thread, so a very large file may cause a brief pause while it processes rather than an instant result — but it won't crash the page.