SmartQueryTools

Convert Arrow to XML Online

Convert Arrow files to XML directly in your browser. Download a structured XML document with one element per row — no upload required.

About converting Arrow to XML

Arrow to XML comes up when a modern analytics step has to feed a system that predates data frames. A pricing or forecasting service written in Python may keep its results as Arrow, but the warehouse management system, the bank upload portal or the regulator's intake form accepts only XML. Converting gives integration teams a well-formed document to map from.

The document is flat: a <data> root, a <row> per record, and a child element per column. It declares no namespace and carries no type information. Most partners publish an XSD with its own element names, so plan an XSLT or mapping step between this output and the final file. Rows from every record batch go into the same document, so a file written in many small batches still has a single <data> root.

Arrow field names are arbitrary UTF-8 strings, and many of them are not valid XML names. Spaces, dots from Spark-style names such as address.city, hyphens and any character outside A to Z, 0 to 9 and underscore become underscores. That includes accented letters, so a field named température becomes temp_rature. Rename columns in the SQL Query tool first if the element names matter.

Worked example

A small sample file, converted with the default settings.

Input (Arrow)

Arrow IPC file (binary, columnar) — shown as a table with its schema

sensor_idsiteread_attemp_cok
101Dock A2026-03-02 09:15:00.1234.25true
102Dock A2026-03-02 09:15:00.1254.5true
205Cold Room 22026-03-02 09:15:01-18.75true
311Loading Bay2026-03-02 09:15:01.004NULLfalse

Schema: sensor_id INTEGER, site VARCHAR, read_at TIMESTAMP_NS, temp_c DOUBLE, ok BOOLEAN

Output (XML)

<?xml version="1.0" encoding="UTF-8"?>
<data>
  <row>
    <sensor_id>101</sensor_id>
    <site>Dock A</site>
    <read_at>2026-03-02 09:15:00.123</read_at>
    <temp_c>4.25</temp_c>
    <ok>true</ok>
  </row>
  <row>
    <sensor_id>102</sensor_id>
    <site>Dock A</site>
    <read_at>2026-03-02 09:15:00.125</read_at>
    <temp_c>4.5</temp_c>
    <ok>true</ok>
  </row>
  <row>
    <sensor_id>205</sensor_id>
    <site>Cold Room 2</site>
    <read_at>2026-03-02 09:15:01</read_at>
    <temp_c>-18.75</temp_c>
    <ok>true</ok>
  </row>
  <row>
    <sensor_id>311</sensor_id>
    <site>Loading Bay</site>
    <read_at>2026-03-02 09:15:01.004</read_at>
    <temp_c></temp_c>
    <ok>false</ok>
  </row>
</data>

What changes when you convert Arrow to XML

  • Each Arrow row becomes a <row> element, and each field becomes a child element named after the field.
  • Field names are cleaned: address.city becomes <address_city>, and a name starting with a digit gets a leading underscore.
  • Values are written as escaped element text. NaN appears as NaN and a timestamp as 2026-03-02 09:15:00.123.
  • A null becomes an empty element, <temp_c></temp_c> for sensor 311, with no xsi:nil marker.
  • Struct, list and map values are written as compact JSON text inside one element. Flatten nested fields first if the receiving system expects child elements.

Your file is processed locally in your browser and is never uploaded. The free limit is 50 MB per file; larger files work if your device has the memory for them.

Frequently Asked Questions

Why did my column température become temp_rature?

Only ASCII letters, digits and underscores are kept in element names, and every other character becomes an underscore. Rename the column to an ASCII name in the SQL Query tool before converting.

Can the output include a namespace or schema reference?

No. Add xmlns and xsi:schemaLocation attributes to the <data> element by hand, or generate the final structure with XSLT.

Are the Arrow types recorded anywhere in the XML?

No. Every value is element text. The receiving system has to know, from its own schema, which elements are numbers, dates or booleans.

Related Tools