Convert CSV to clean indented XML in your browser: custom root and row names, header row as tags, values escaped. No upload. No upload — runs 100% in your browser
Each CSV data row becomes one XML element — named as you choose — containing one child tag per column. The header row supplies the tag names; without it, the tool generates column_1, column_2… The whole document is wrapped in a root element you name (defaults that fit most imports: data and row).
XML element names cannot contain spaces or start with a digit. Column headers like Order Date or 2026 Total are sanitized automatically (Order_Date, col_2026_Total), duplicates made unique, and the mapping is visible in the output itself — what you see in the tags is exactly what was written.
A cell containing &, < or a quote is entity-escaped so the result is always well-formed XML, and commas/quotes/newlines inside cells are handled per the CSV standard on input. The output includes the XML declaration and 2-space indentation, ready for an import job or an XSLT transform.
No. Everything on this page runs inside your browser using JavaScript and WebAssembly. Your file never leaves your device — you can even disconnect from the internet after the page loads and the tool still works.
No. Invalid characters become underscores and names that don't start with a letter get a prefix, so the output is always well-formed.
Yes — the root and row element names are inputs on the page. Column tag names come from the header row (or are generated when there is none).
Values are entity-escaped on output; any cell content round-trips back through any conforming XML parser.