Runs on your device · Your file never leaves your device.
Drop a CSV or paste it and get an XML document with a <root> element, one <item> element per row and one child element per column, named after the header. Separators are detected automatically (comma, semicolon, tab, pipe), quoted fields are handled to RFC 4180, and a UTF-8 byte-order mark is stripped.
Column names that XML cannot use as element names — with spaces, symbols or a leading digit — are sanitised with underscores ("Unit price" becomes Unit_price), so the output is always well-formed. Values are written as text inside the elements; there are no attributes, which keeps the document simple for any parser.
You see the first 200 lines before downloading, and the conversion happens entirely on your device.
How to convert CSV to XML
Drop a CSV file, or paste the CSV text.
Leave the separator on automatic, or choose it.
Press Convert to XML and check the preview.
Download the .xml.
Supported formats and limits
Input
CSV / TSV — a file or pasted text
Output
XML 1.0, UTF-8, <root><item>…</item></root>
Parsing
RFC 4180; separator auto-detected
Names
Header names sanitised to legal element names
Where it runs
In your browser; nothing uploaded
Not for: Producing a schema-specific XML (a bank, tax or e-commerce format) — the element names come from your headers, not from a schema.
Frequently asked questions
Are my files uploaded to a server?
No. This conversion runs entirely inside your browser using your own device’s processing power. The file never leaves your computer or phone, which is why it also works when your connection drops.
What does the XML structure look like?
An XML declaration, then <root>, then for each row an <item> holding one element per column: <item><name>Ahmed</name><city>Cairo</city></item>. The row element is always called item.
My headers have spaces — is that a problem?
No. Names are sanitised to what XML allows: spaces and symbols become underscores and a leading digit gets an underscore in front. The rest of the name is unchanged.
Does it detect the separator?
Yes — comma, semicolon, tab and pipe are tried against the first lines and the consistent one wins. You can also choose it explicitly.