XML to CSV Converter Online - Fast, Secure & Private
Updated
Convert XML to CSV online instantly. Flatten complex XML data into easy-to-read CSV tables. 100% client-side privacy. Free online tool.
Key Features
- ✅ Automatic flattening of nested XML
- ✅ Comma-separated CSV output
- ✅ Header row generation
- ✅ Fast client-side processing
How to Use
- Paste your XML data or upload an .xml file
- Click Convert — each occurrence of the shallowest repeating element becomes a row
- Click Convert to generate the CSV output
- Download or copy the CSV for use in spreadsheets or databases
Expert FAQ
- How does it decide which repeating element becomes a CSV row?
It looks for the shallowest element that repeats as a sibling under a common parent (e.g. <item> under <items>) and treats each occurrence as one row; that element's children and attributes become columns, with nested children flattened to dot-notation names. If your document repeats at more than one depth (orders that each contain line items), the outer element becomes the row and the inner list is written as JSON text in a single cell. - Do XML attributes and child elements both become columns, and can I tell them apart afterward?
Yes to both — attribute values and child-element text both flatten into columns, and attribute-derived columns are prefixed (matching the "@name" convention used by this site's XML to JSON converter) so you can distinguish <item id="5"> from a child <id>5</id> in the header row rather than having them collide under the same column name. - What happens to nested elements several levels deep — like an order with nested line items with nested tax fields?
They're flattened using dot-notation column names (shipping.address.city), the same convention used across this site's flattening converters, so the data stays queryable rather than collapsing into an opaque blob. A genuinely repeating nested collection (multiple line items per order) can't flatten into a single row without either duplicating the parent order's columns per line item or losing the association — if your XML has that shape, consider converting via XML to JSON first, where the nested array structure survives intact, then flatten deliberately with JSON to CSV. - A field value starts with "=" or "+" — is that a risk once the CSV is opened in Excel?
Yes — this is the same CSV injection risk that affects any CSV export, not specific to XML as a source: Excel and Google Sheets treat cell values starting with =, +, -, or @ as formulas by default. This converter prefixes such values to prevent formula execution on open, which matters if any of your XML's text content originated from untrusted or user-supplied input.
Technical Details
XML's hierarchy and CSV's flat grid are fundamentally different shapes, so converting between them requires picking a specific repeating element to treat as "one row" — usually the shallowest element that occurs multiple times as a sibling under a common parent. When a document has repeating structures at more than one depth (nested line items inside nested orders, for instance), auto-detection picks the most likely candidate, but an explicit row-element selector avoids ambiguity when there's a genuine choice to be made. Both attributes and child-element text flatten into columns, with attribute-derived columns marked using the same "@name" prefix convention as this site's XML to JSON converter, so a source attribute and a same-named child element don't collide in the output header row. Deeper nesting flattens to dot-notation column names (address.city, address.zip) to keep the data individually queryable rather than serialized into one unreadable cell — this mirrors how JSON to CSV handles the equivalent case. A structural limit worth knowing: a genuinely repeating nested collection (multiple line items per order, each with several sub-fields) can't cleanly become a single flat row without either duplicating the parent's columns per nested item or discarding the relationship — if that's your data's actual shape, converting via XML to JSON first preserves the nested arrays intact, and you can flatten deliberately from there with a tool designed for that specific transform. And regardless of source format, any text value beginning with =, +, -, or @ is prefixed to prevent it from executing as a formula when the resulting CSV is opened in Excel or Sheets — a real risk whenever the underlying XML contains user-supplied text. Validate the output afterward with the CSV Validator.