Drop your XML file on the box above, or click Choose file. You can also paste XML, or try the sample order export.
Check “One row per”. The converter picks the record that repeats most (line items in an order export) and shows the first 20 rows. Pick another lane if you want one row per order instead.
Pick a delimiter. Comma is the default. Choose semicolon if your Excel uses a decimal comma (most of Europe), or tab for pasting into other tools.
Click Convert to CSV, then Download. A 200 MB file takes about ten seconds.
How the converter turns XML into rows
XML is a tree. CSV is a grid. Something has to decide which branch of the tree becomes the rows, and that one decision is where most converters go wrong.
Take an order export. Each <order> has a date, a customer with an address, and a list of <item> elements. What you usually want is one row per item with the order’s fields copied onto every row: order ID, date, customer, zip. Then you can filter by customer, sum by SKU, or drop the file in a pivot table without fixing anything by hand.
We ran four online converters on the same 5-order test file before building this one. Most spread the items sideways into columns like items/item/0/name, items/item/1/name, which falls apart once an order has 50 lines. One gave item rows but left the order fields blank on every row after the first. Another produced [object Object]. None of them gave the plain “item rows with order fields filled in” that the file was obviously asking for.
What happens to each part of the file
The record you pick (say, item) becomes the rows. Records above it (the order) repeat their fields on each of their rows. An order with no items still gets one row, so nothing silently disappears.
Small lists inside a record, like two payments per order, become numbered columns: payment[1].method, payment[2].method. That happens up to 10 per record.
Longer lists and repeated values (tags, notes) go into one column, joined with “; ”.
Fields that appear once in the whole file, like an export date in the header, go on every row. The notes under the preview say when that happens.
Attributes and elements are both kept. <price currency="USD">9.99</price> gives an item.price column and an item.price.currency column.
Columns are named by their path from the record, so order.customer.address.zip tells you exactly where a value came from. Namespace prefixes such as cac: are dropped from the names.
Every field gets a column, even the late ones
The file is read twice. The first pass lists every field in the file. The second writes the rows. It sounds wasteful, but it’s the only way to guarantee a field that first shows up in order 299,900 still gets a column. Converters that look at the first few hundred records drop it without a word (we caught one doing exactly that with a coupon field). On a 214 MB file in Chrome, the first pass took 3.6 seconds and writing the CSV another 5.9.
Your file stays on your computer
The whole conversion runs in your browser, in a background thread, so the page stays responsive even with a 1 GB file. Nothing is uploaded. That matters when the export holds customer names, addresses and invoice totals: you don’t have to trust a server you’ve never heard of to delete it afterwards.
Example: an order export
Here’s one order with two items from the sample file. With “One row per: item” it becomes two rows, and both carry the order ID, status, customer and total.
The full sample (5 orders, 9 items) gives 9 rows and 20 columns. Pick “order” instead and you get 5 rows, with the
items numbered item[1].sku to item[3].sku. The zip 01123 keeps its leading zero.
CSV or Excel: which to pick
Pick CSV when the file goes into another system: a database import, a script, a shop or accounting tool. It has no row limit and it’s the smallest output.
Pick Excel when a person will open it. Double-click a CSV and Excel guesses every column type. Zip codes like 00123 lose their zeros, and IDs longer than 15 digits lose their last digits. The CSV file is fine; Excel’s reading of it isn’t. The .xlsx output stores those values as text and real amounts as numbers, so nothing gets mangled on the way in.
Drop the XML file on the box at the top of this page (or click Choose file). The converter reads it, picks what one row should be and shows the first 20 rows. Change “One row per” if you want a different level, then click Convert to CSV and Download. There’s nothing to install and no account.
Is XML the same as CSV?
No. A CSV file is flat: lines of values split by commas. XML is a tree, so one order can hold a customer, the customer an address, and the order a list of items. Turning XML into CSV means deciding which level becomes the rows and repeating the levels above it on every row.
Can I convert a large XML file to CSV?
Yes. The file is read in pieces in a background thread, so there’s no size cap. In Chrome on a Mac we converted a 214 MB export (600,000 rows) in under 10 seconds and a 1.08 GB one (3,000,000 rows) in under 30. Your device’s memory is the real ceiling, so very large files are safer on a computer than a phone.
How do I convert an XML file to a table?
Decide what one row means (one order, one line item, one product), then flatten everything above it into columns. The converter here does that for you: it finds every repeating element, defaults to the most frequent one and shows a preview. Pick CSV or Excel for the download.
Is my file uploaded anywhere?
No. The conversion runs inside your browser. The page downloads its own code from our server, but your file’s contents never leave your computer. You can check: open your browser’s developer tools, watch the Network panel while you convert, and you’ll see no request carrying your data.
Why does one order appear on several rows?
Because the rows are items, and each item row repeats its order’s ID, date and customer. That’s what lets you filter by customer or sum by product. Want one row per order instead? Pick “order” under “One row per”: items then become columns (item[1].sku, item[2].sku…) up to 10 per order, and are joined with “; ” above that.
Why do zip codes lose their leading zeros when I open the CSV in Excel?
A CSV has no column types, so Excel guesses when you double-click it, and Excel automatically removes leading zeros. The CSV itself still says 00123. Import it with Data > From Text/CSV and set the column to text, or download the Excel version, which stores those values as text.
Does anyone still use XML?
Every day, mostly where systems trade data: UBL e-invoices, ISO 20022 bank statements (camt.053), product feeds, ERP and e-commerce exports, RSS and sitemaps. Even an Excel .xlsx file is a ZIP folder of XML files. Developers prefer JSON for new web APIs, but business exports are still very often XML.