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
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
Tom & Jerry or <20% off> produces valid XML rather than a parse error at the far end.Headers that cannot be element names
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.
ordersandorderreads far better thanrootanditem, 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.