How to Turn XML Data Into Spreadsheet Rows
XML is hierarchical; spreadsheets are flat. The conversion works cleanly when your XML is a list of similar records — and produces messy output when it's a deeply nested document. Knowing which situation you're in before starting saves time.
When the conversion works cleanly
XML designed for data exchange — product catalogues, order exports, user lists, report feeds — typically maps well to CSV. Each repeating element becomes a row; its child elements become columns:
<products>
<product>
<sku>ABC-001</sku>
<name>Widget A</name>
<price>9.99</price>
<stock>150</stock>
</product>
<product>
<sku>ABC-002</sku>
<name>Widget B</name>
<price>14.99</price>
<stock>87</stock>
</product>
</products>
This converts to a clean four-column CSV: sku, name, price, stock. Each product is a row.
The flattening problem
Spreadsheets can't represent one-to-many relationships in a single table. An order with multiple line items has two valid flat representations — neither is perfect:
One row per order: summarise line items (item count, total) — loses item detail.
One row per line item: repeat order data on each row — duplicates information and makes order-level aggregation harder.
Before converting XML with nested lists, decide which perspective the spreadsheet needs to serve and structure the conversion accordingly.
Attributes vs elements
XML can represent data two ways: child elements (<price>9.99</price>) or attributes (<product price="9.99"/>). Good converters handle both. Check that attribute values appear as columns in the output — some simpler converters drop attributes silently.
<!-- Both are valid XML for the same data -->
<product sku="ABC-001" price="9.99"/> <!-- attributes -->
<product><sku>ABC-001</sku><price>9.99</price></product> <!-- elements -->
When XML to JSON is better than XML to CSV
If your XML has significant nesting that you need to preserve — addresses with sub-fields, products with multiple variants, orders with multiple line items — JSON preserves the hierarchy while making it more accessible. Convert to CSV only when you specifically need a flat format for a spreadsheet application or a tool that requires CSV.