AnyFormat

00 CSV → XML

CSV to XML

Each row an element, column names as tags, names made legal.

01CSV in
02XML out
03Options 8

Exports from European versions of Excel use semicolons, because the comma is the decimal point there.

Off means rows come out as arrays instead of objects.

Off keeps every value as a string — safer for IDs, postcodes and phone numbers with leading zeroes.

XML allows exactly one top-level element, so arrays need a wrapper.

  • No upload The conversion runs in this tab. Your file never travels — not to us, and not to the advertising.
  • No sign-up, no email, no daily cap There is no account system to sign up to.
  • No size limit we invented Only your device's memory — about ~2 GB on a desktop browser, ~400 MB on a phone.
  • Turn your Wi-Fi off and convert anyway The conversion needs nothing but this page. Ads will not load without a connection; your file will still convert. That is the whole claim, and it takes five seconds to check.

Each row becomes an element and each column a child tag. Set the root and item names to something meaningful — orders and order rather than root and item — and the output reads like XML someone wrote deliberately.

Column headers become element names

Which means they must be legal XML names, and spreadsheet headers frequently are not. Order Total becomes Order_Total; 2026 Q1 becomes _2026_Q1; a header beginning with xml gains a leading underscore because that prefix is reserved. You get a count of how many were renamed.

If the names matter, rename the columns in the source before converting.

Escaping

Ampersands, angle brackets and quotes in cell values are escaped, so text like Tom & Jerry or <20% off> produces valid XML rather than a parse error at the far end.

Headers that cannot be element names

An XML element name cannot contain a space, cannot start with a digit, and cannot start with the letters xml in any casing. Spreadsheet headers do all three routinely — 2026 total, Unit price, XML id. Those are rewritten to something legal and the number of renames is reported, rather than being silently mangled or the file being rejected. A header that is empty gets a positional name, so a stray trailing comma in the header row shows up as an obvious extra column instead of shifting every value one place left.

Questions

My column names changed.
They contained characters XML forbids in element names. Rename the columns in the source if the exact names matter.
Can I put values in attributes instead of child elements?
Not directly. Convert to JSON first, prefix the keys you want as attributes with @, then use JSON to XML.
Can I name the elements something meaningful?
Yes — set the root and item names in the options. orders and order reads far better than root and item, and costs nothing.
Is my data uploaded anywhere?
No. The conversion runs as JavaScript inside this tab. Open your browser's Network panel and convert something — you will see no request carrying your data, because there is no server to send it to. You can also turn your Wi-Fi off and convert anyway.