CSV to XML Converter

Convert a CSV into clean, well-formed XML. Each row becomes an element and each column becomes a child tag, or an attribute if you prefer. Name the root and row elements yourself, and special characters are escaped so the output is valid.

Read the guide: How to Convert CSV to XML
CSV input
…or drag a CSV or Excel file here

Everything runs on your device. Files never leave your browser.

How it works

  1. 1

    Add a CSV file

    Paste CSV text or drop in a .csv file. The header row supplies the tag names.

  2. 2

    Set the element names

    Name the root and row elements, and choose whether each value is a child tag or an attribute.

  3. 3

    Copy or download the XML

    Get well-formed XML, ready for an API, a feed or an import.

Instant & 100% private — nothing is uploaded

Everything runs locally in your browser. Your files are processed on your own device and are never sent to a server, so there are no upload waits, no size limits from us, and nothing is ever stored or logged.

Frequently asked questions

How does a CSV map to XML?
Each data row becomes a row element inside a root element, and each column becomes either a child tag or an attribute named after its header. So a row with Name and Email columns becomes an element containing a Name tag and an Email tag, the shape most XML imports expect.
What happens to characters like & and <?
They are escaped automatically, so an ampersand becomes &amp; and an angle bracket becomes its entity, keeping the XML well-formed. Header names that are not valid XML tag names, such as one starting with a digit, are adjusted so the document still parses.
Can I choose attributes instead of child tags?
Yes. Switch to the attribute style and each value is written as an attribute on the row element, which gives a more compact document. Child tags are usually easier to read and to extend, so they are the default.
Is my file sent to a server?
No. Everything runs locally in your browser. Your file is read and processed on your own device, nothing is uploaded, and nothing is logged or stored.