The workbook is written in your browser. Your XML is never uploaded to any server.
Paste XML
Upload File

Click to select or drag & drop an .xml or .txt file

How this table was built

The workbook is built in your browser. Your data is never uploaded to any server.

Convert XML to Excel (XML to XLSX)

This free XML to Excel converter turns XML into a real .xlsx workbook entirely in your browser. Paste your XML or upload an .xml file, check the preview, and download the sheet. Nothing leaves your device, and there is no sign-up.

XML is a tree; a worksheet is a rectangle. So a conversion is really a set of decisions: which repeating element becomes the rows, whether a child element becomes a column of its own or a dotted path, whether an id="…" attribute becomes a column, what happens to a ns: prefix, and what to do with a record that has fewer fields than its neighbours. A generic file converter turns .xml into .xlsx without ever telling you which of those it chose — which is how a file with hundreds of records comes out as one enormously wide row. This page makes every one of those decisions explicit, in the report under the preview, before you download.

How to use this XML to Excel converter

Why the row element is the whole conversion

Most real XML does not put its records at the top level. An API response usually looks like this:

<response>          <!-- one child -->
  <data>            <!-- still one child -->
    <records>
      <record>…</record>   <!-- the actual rows, three levels down -->
      <record>…</record>
    </records>
  </data>
</response>

A converter that only inspects the top level sees a single <data> child, finds nothing repeating, gives up, and produces one very wide row. This page walks the entire document instead, collects every element path that repeats, and scores each one — preferring a path that carries structure of its own (child elements or attributes) over a path that is merely a repeated piece of text. Frequency alone is not enough: in <item><tag>a</tag><tag>b</tag></item> the inner tag appears more often than item, but item is the record. Every candidate and its score is listed in the report, and the selector lets you override the choice.

What this tool supports

Nested elements, attributes and namespaces

In your XMLBecomes
<dimensions><width>30</width></dimensions>a column named dimensions.width — nested elements are flattened with dot notation
<book id="b1">a column named @id — attributes are promoted, or ignored if you prefer
<ns:title>title with prefixes stripped (the default), or ns:title if you keep them
xmlns:ns="…"never a column — namespace declarations are not data
<tag>a</tag><tag>b</tag>tag[1] and tag[2], so a row with only one tag stays aligned
<note>Hello <b>world</b></note>Hello in a note.#text column, world in note.b — text next to elements is not thrown away

Ragged records become a rectangle

Real exports are uneven: one record has a note, the next does not; one has three tags, the next has one. The column set is the union of every record, and a record missing a field gets an empty cell rather than a shifted row — so sorting and filtering in Excel behave. The report tells you how many records were padded and how many cells were filled in.

Every structural decision is named

Under the preview, How this table was built lists the row element that was chosen and why, every candidate path with its repeat count, how many columns came from elements versus attributes versus #text, which namespace prefixes were stripped, which sibling groups were indexed, and how many records were padded. If the sheet does not look the way you expected, the reason is written down instead of hidden.

Values, and why they default to text

XML has no type system — <id>007</id> is text, and turning it into the number 7 loses the leading zeros that fixed-width IDs depend on. So every cell is written as text by default, and the report counts the numeric-looking cells it left alone. Switch Values to Numbers as numbers when the columns really are numeric and you want to run SUM on them; leading-zero and very long values still stay text so nothing is silently mangled.

What this tool does not do

Frequently asked questions

Is this XML to Excel converter free?

Yes. No account, no sign-up, no conversion limit and no file-size cap — the workbook is built in your browser.

My XML converted to one row. Why?

Because the repeating record element was not found, so the whole document became a single row. Open Rows come from and pick the element that actually repeats — usually the one that appears once per record, three or four levels down. The report lists every repeating path with its count, so the right one is visible.

Is my XML uploaded anywhere?

No. The file you pick is read with the browser's own File API and converted in the page. There is no request that carries your data.

How are attributes handled?

By default each attribute becomes its own column, named @ plus the attribute name — <book id="b1"> gives a column @id. Set Attributes to Ignore to leave them out. Namespace declarations (xmlns) are never treated as data.

What happens to namespace prefixes like ns:title?

They are stripped by default, so the header reads title. Switch to Keep if the prefix matters to you. The report names every prefix it found and how often it occurred.

How are nested elements handled?

They are flattened with dot notation: <dimensions><width>30</width></dimensions> becomes a column dimensions.width. Nothing is discarded — every leaf path in the record becomes a column.

What about an element that appears more than once inside one record?

By default each occurrence gets an indexed column — tag[1], tag[2] — so a record with only one tag still lines up under tag[1]. Switch Repeated siblings to Join into one cell if you would rather see them together, separated by a pipe.

Are numbers written as numbers?

Not by default — every cell is text, which keeps 007 and 18-digit IDs intact. Change Values to Numbers as numbers when you want Excel to treat numeric columns as numeric. Leading-zero values and values longer than 15 digits always stay text.

What if my records have different fields?

The column set is the union of every record, and a record without a field gets an empty cell. The report tells you how many records were padded, so a genuinely uneven file is visible rather than surprising.

Does it handle CDATA and entities?

Yes. CDATA content is read as plain text and appears in its column, and standard XML entities such as &amp; are resolved by the browser's own XML parser.

Is there a file size limit?

There is no imposed limit. The workbook is built in your browser's memory, so very large documents depend on your device. Typical API responses and exports convert in a moment.

What if I need another format?

For comma-separated output use XML to CSV, for JSON use XML to JSON, and to go the other way use JSON to Excel or CSV to Excel.