Convert XML to CSV Online

Convert an XML feed or export into a CSV. The repeating element becomes rows, the child elements become columns, and you can see the result before you download it.

From

The only part of this site that uses a server. The address is sent to it so the page can be fetched, because a browser is not allowed to fetch someone else's page itself. Your own files are never involved.

Nothing here is uploaded. The parsing happens on this page.
Edit
Paste or upload something above and it will appear here.
ToDataMarkupDocumentsCodeSchemasImages

The output will appear here once there is a table to convert.

What XML is

XML marks up data with nested named tags and optional attributes. It is verbose, strict about being well-formed, and can carry a schema that says what shape a document must have.

Enterprise integrations, government data feeds, RSS, SOAP services and older document formats.

What CSV is

CSV is a text file where each line is a row and commas separate the fields. There is no type system, no formatting and no second sheet. Every value is text until something downstream decides otherwise.

Almost every database, analytics tool and spreadsheet can read and write it, which is why exports default to it.

What changes when you convert XML to CSV

The first repeating element is treated as the rows. Attributes are read alongside child elements and prefixed so they do not collide with a same-named tag. Nesting one level deep becomes dotted column names; deeper structures are kept as text.

Any value containing the delimiter, a quote or a line break gets wrapped in quotes, and embedded quotes are doubled. That is the rule in RFC 4180 and it is what spreadsheet software expects.

Column names come from the element names, which means they inherit whatever naming convention the feed uses. A feed written by a Java service will hand you camelCase headers, and one from an older system will hand you underscores.

Attributes become their own columns rather than being dropped. In a lot of XML the useful identifiers are attributes, so losing them would lose the key.

Namespaced tags keep their prefix in the column name. A tag written as ns:price becomes a column called ns:price, which is ugly but unambiguous.

What carries over from XML to CSV

XML records 2 things about a table that CSV has no way to hold.

An empty cell and a missing one are the same thing in CSV, so a null and an empty string in the XML both come out blank and can no longer be told apart.

XML can hold a value that is itself a list or an object. CSV has only flat cells, so nested values are flattened into one cell rather than being spread across columns.

The keys stop being repeated: CSV writes the column names once at the top, so the same table takes noticeably less space.

The identifier 007 comes out of the CSV as 007. Reading it as a number would have made it 7, and an id that changes value is worse than one that stays text.

The role "Analyst, data" survives with its comma, in one cell rather than split across two. That is the first thing to check in any converted table, and the usual place a CSV file goes wrong.

The quotes around Jonah "Jo" Pryce are doubled, which is how the delimited formats escape a quote in the CSV.

A worked example

Three rows of staff data, with an identifier that has a leading zero, a value containing a comma, a value containing quotes and one blank cell. Those are the four places formats disagree, so they are the four places to look.

XML in
<?xml version="1.0" encoding="UTF-8"?>
<staff>
  <person id="007">
    <name>Halima Yusuf</name>
    <role>Analyst, data</role>
    <started>2024-03-15</started>
    <hours>38.5</hours>
  </person>
  <person id="012">
    <name>Jonah "Jo" Pryce</name>
    <role>Engineer</role>
    <started>2025-11-02</started>
    <hours></hours>
  </person>
  <person id="104">
    <name>Wei Chen</name>
    <role>Manager</role>
    <started>2023-06-30</started>
    <hours>40</hours>
  </person>
</staff>
CSV out
id,name,role,started,hours
007,Halima Yusuf,"Analyst, data",2024-03-15,38.5
012,"Jonah ""Jo"" Pryce",Engineer,2025-11-02,
104,Wei Chen,Manager,2023-06-30,40

Questions

How do I convert XML to CSV?

Paste your XML into the box above or drop the file onto it. Check the table in the grid, then copy or download the CSV from the output panel. It takes one step and the data never leaves your browser.

Why does my CSV open with all the data in one column?

The file uses a delimiter your spreadsheet did not expect. Exports from European locales often use semicolons because the comma is the decimal separator there. Change the delimiter in the export options and the columns split correctly.

What happens to nested values?

CSV has no nested cell, so a list or object inside a XML value is flattened into a single cell rather than expanded into extra columns. Split it before converting if the parts need to be separate.

Is there a limit on file size?

No. The work happens on your own machine, so the limit is your machine's memory rather than an upload cap. A file with tens of thousands of rows converts in a second or two.

Is my data uploaded anywhere?

No. The parsing and generating are done by JavaScript running on this page. You can watch the network tab while you convert and see that nothing is sent.

Related conversions