XML to CSV Converter

XML to CSV Converter reads a repeating XML structure — a list of records such as <row>, <item> or <product> elements — and flattens it into a comma-separated table. It collects every field name across the records to build the header, then fills one row per record.

Parsing happens locally in your browser, with proper handling of XML entities. The result is a clean CSV you can open in any spreadsheet.

CSV to XML
XML input0 chars
CSV output
The result appears here as you type.

How to use XML to CSV Converter

  1. 1

    Paste your XML

    Provide XML that contains a list of repeated record elements.

  2. 2

    Get the CSV

    Each record becomes a row; the union of all child element names becomes the header.

  3. 3

    Copy or download

    Copy the CSV or download a .csv file for Excel, Sheets or a database import.

What XML shapes work best

The converter looks for the repeated record elements inside your document — for example the <row> elements under a <rows> root, or <item> elements inside a feed. Each record's child elements become the columns.

If different records contain different fields, the header is the union of all field names and missing values are left empty, so irregular data still produces a rectangular table.

Attributes and nested content

Each record's direct child elements map to columns. Nested objects that are not simple text are serialised into the cell as JSON so no information is silently lost, while element attributes on the record are not emitted as columns.

For a guaranteed round trip, pair this with the CSV to XML converter, which writes the <rows>/<row> shape this tool reads most cleanly.

Frequently asked questions

Which elements become rows?
The repeated record elements in your XML — such as multiple <row> or <item> tags — each become one CSV row.
How are the columns chosen?
From the child element names of the records. The header is the union of all field names found across every record.
What if records have different fields?
Missing fields are left blank, so records with different shapes still produce a consistent table.

Last updated: