XML to Excel converter

Paste XML with repeated records and download a .xlsx spreadsheet, built entirely in your browser.

Everything runs in your browser. Your data never leaves your device.

How records are detected

XML does not tell you which element is "the row", so the converter works it out. It scans the document for the element name that repeats most often under a single parent and treats each occurrence as one record. In a feed like an orders element containing fifty order elements, it picks order, turns each one into a spreadsheet row, and shows you the element it chose so you can confirm it guessed right. Each record's child elements become columns, named after their tags, and attributes on the record element get columns too, so an id attribute sits happily alongside the child values.

The assumption behind all this is flat, repeated records: many same-named elements whose children each hold a single value. That covers most real exports, RSS-style feeds, API responses and database dumps. When a document does not fit, for instance when no element name repeats at all, you get a clear error saying so rather than a spreadsheet full of nonsense. And when a record contains deeper nesting, anything below one level is flattened to its combined text, so the value is kept even if the structure is not.

Worked examples

<people><person><name>Ada</name></person><person><name>Grace</name></person></people>
Two rows under a name header, because person is the repeated element
<order id="7"><total>42.50</total></order> repeated
Columns id and total, with 42.50 written as a real number you can sum
<tags><tag>red</tag><tag>blue</tag></tags>
Records with no children use their own text: two rows, one tag column

Columns, types and awkward cases

Column order follows first appearance, and records do not all need the same fields: a value missing from one record simply leaves an empty cell in that row. If a child element repeats inside a single record, say two phone elements in one contact, the extras become numbered columns such as phone_2, so nothing is silently dropped. Should an attribute and a child element share a name, the second one is numbered the same way.

Values that are unambiguous plain numbers are written as numeric cells, so totals and quantities arrive ready to sum. Everything else stays as text exactly as it appears in the XML, including codes with leading zeros and date-shaped strings, which protects them from being reinterpreted the way Excel famously mangles CSV files on open. Well-formedness is checked first, and broken XML, an unclosed tag or an unquoted attribute, is reported as an error before any conversion is attempted.

Private by design

Typical converter sites upload your XML to a server, transform it there and hand back a link, which is a poor fit for order feeds, patient lists and anything else XML tends to carry. This tool never does that. The document is parsed by your browser's own XML parser, the records are extracted by JavaScript on your machine, and the .xlsx is assembled in memory and downloaded straight from there. Your data never leaves your device, nothing is logged or stored, and once the page has loaded the converter carries on working even with no internet connection.

After a successful conversion you see the number of records found, the element chosen as the record, the column count and the output size, which makes it easy to spot a wrong detection before you open the file. The download is a standard single-sheet .xlsx that opens in Excel, LibreOffice and Google Sheets. Going the other way, the Excel to XML converter linked below produces the same rows-of-records shape, and the JSON to Excel converter does the equivalent job when your data arrives as JSON instead.

Frequently asked questions

Is my XML uploaded anywhere?

No. Parsing, record detection and building the .xlsx all happen in your browser with JavaScript, and the download is assembled in memory on your device. Nothing is sent to a server, which is the key difference from converter sites that process files remotely.

How does it decide what a record is?

It looks for the element name that repeats most often under a single parent and treats each occurrence as one row. In a document like a rows element containing many row elements, each row becomes a spreadsheet row, its child elements and attributes become the columns, and the detected element name is shown so you can check it picked the right one.

What XML shapes does it not handle?

It expects flat, repeated records: many elements with the same name whose children hold single values. Documents with no repeated element at all are rejected with a clear message. Deeply nested structures still convert, but anything below one level inside a record is flattened to its combined text rather than split into extra columns.

Do attributes become columns?

Yes. An attribute on a record element, such as an id, gets its own column alongside the child elements. If a child element repeats inside one record, the extra occurrences get numbered columns such as tag_2 and tag_3 so no value is dropped.

Do numbers come out as real numbers in Excel?

Values that are unambiguous plain numbers, like 42 or -3.75, are written as numeric cells you can sum and sort. Everything else, including codes with leading zeros and date-like strings, is kept as text exactly as it appears in the XML so nothing is reinterpreted.

Related tools