Direct naar de tool
ViewCSV
Niets wordt geüpload

CSV omzetten naar XML

orders.csv· VOORBEELDGEGEVENS15 rijen · 8 kolommen
Waarden als
<?xml version="1.0" encoding="UTF-8"?>
<rows>
  <row>
    <order_id>001041</order_id>
    <customer>Julia Jansen</customer>
    <city>Den Haag</city>
    <product>Monitor 27"</product>
    <quantity>7</quantity>
    <unit_price>19.63</unit_price>
    <order_date>2026-01-16</order_date>
    <status>refunded</status>
  </row>
  <row>
    <order_id>001042</order_id>
    <customer>Finn Jansen</customer>
    <city>Groningen</city>
    <product>Coffee beans 1kg</product>
    <quantity>4</quantity>
    <unit_price>61.32</unit_price>
    <order_date>2026-02-07</order_date>
    <status>paid</status>
  </row>
  <row>
    <order_id>001043</order_id>
    <customer>Noah de Boer</customer>
    <city>Utrecht</city>
    <product>Monitor 27"</product>
    <quantity>7</quantity>
    <unit_price>5.83</unit_price>
    <order_date>2026-03-18</order_date>
    <status>paid</status>
  </row>
  <row>
    <order_id>001044</order_id>
    <customer>Emma Meijer</customer>
    <city>Amsterdam</city>
    <product>Chair, ergonomic</product>
    <quantity>3</quantity>
    <unit_price>74.88</unit_price>
    <order_date>2026-04-22</order_date>
    <status>refunded</status>
  </row>
  <row>
    <order_id>001045</order_id>
    <customer>Julia Janssen</customer>
    <city>Utrecht</city>
    <product>Notebook A5</product>
    <quantity>5</quantity>
    <unit_price/>
    <order_date>2026-05-02</order_date>
    <status>shipped</status>
  </row>
  <row>
    <order_id>001046</order_id>
    <customer>Julia Bakker</customer>
    <city>Gent</city>
    <product>Chair, ergonomic</product>
    <quantity>8</quantity>
    <unit_price>113.31</unit_price>
    <order_date>2026-06-17</order_date>
    <status>shipped</status>
  </row>
  <row>
    <order_id>001047</order_id>
    <customer> Daan van Dijk </customer>
    <city>Den Haag</city>
    <product>USB-C cable</product>
    <quantity>1</quantity>
    <unit_price>48.13</unit_price>
    <order_date>2026-07-06</order_date>
    <status>pending</status>
  </row>
  <row>
    <order_id>001048</order_id>
    <customer>Julia van den Berg</customer>
    <city>Groningen</city>
    <product>Notebook A5</product>
    <quantity>1</quantity>
    <unit_price>73.68</unit_price>
    <order_date>2026-08-07</order_date>
    <status>pending</status>
  </row>
  <row>
    <order_id>001049</order_id>
    <customer>Julia van Dijk</customer>
    <city>Eindhoven</city>
    <product>Chair, ergonomic</product>
    <quantity>3</quantity>
    <unit_price>102.72</unit_price>
    <order_date>2026-09-01</order_date>
    <status>shipped</status>
  </row>
  <row>
    <order_id>001050</order_id>
    <customer>Finn de Jong</customer>
    <city>Antwerpen</city>
    <product>Monitor 27"</product>
    <quantity>3</quantity>
    <unit_price>137.32</unit_price>
    <order_date>2026-01-04</order_date>
    <status>pending</status>
  </row>
  <row>
    <order_id>001051</order_id>
    <customer>Tess Janssen</customer>
    <city>Den Haag</city>
    <product>Notebook A5</product>
    <quantity>9</quantity>
    <unit_price>125.22</unit_price>
    <order_date>2026-02-12</order_date>
    <status>refunded</status>
  </row>
  <row>
    <order_id>001052</order_id>
    <customer>Julia de Jong</customer>
    <city>Groningen</city>
    <product>Desk lamp</product>
    <quantity>5</quantity>
    <unit_price>62.89</unit_price>
    <order_date>2026-03-04</order_date>
    <status>shipped</status>
  </row>
  <row>
    <order_id>001053</order_id>
    <customer>Zoë Meijer</customer>
    <city>Rotterdam</city>
    <product>Notebook A5</product>
    <quantity>1</quantity>
    <unit_price>127.86</unit_price>
    <order_date>2026-04-09</order_date>
    <status>pending</status>
  </row>
  <row>
    <order_id>001054</order_id>
    <customer>Sophie Visser</customer>
    <city>Antwerpen</city>
    <product>Chair, ergonomic</product>
    <quantity>2</quantity>
    <unit_price>99.73</unit_price>
    <order_date>2026-05-13</order_date>
    <status>pending</status>
  </row>
  <row>
    <order_id>001043</order_id>
    <customer>Noah de Boer</customer>
    <city>Utrecht</city>
    <product>Monitor 27"</product>
    <quantity>7</quantity>
    <unit_price>5.83</unit_price>
    <order_date>2026-03-18</order_date>
    <status>paid</status>
  </row>
</rows>

15 rijen · 1 bestand

Open of plak een CSV-bestand en je krijgt welgevormde XML: een hoofdelement, één element per record, en elke waarde als onderliggend element of als attribuut. Kolomnamen die geen geldige XML-naam zijn, zoals Order ID of 2024 total, worden hernoemd, en elke naamswijziging wordt vermeld. Het bestand wordt in je browser omgezet en nooit geüpload.

Zo zet je CSV om naar XML

  1. Kies Bestand openen, sleep een .csv-, .tsv- of .txt-bestand naar de tool, of kies Plakken. Zien de kolommen er niet goed uit, controleer dan het scheidingsteken en de codering onder Importinstellingen.
  2. Geef het Hoofdelement en het Element per rij (standaard rows en row) de namen die het ontvangende systeem verwacht.
  3. Kies Waarden als, wat er met lege waarden gebeurt, de Inspringing en de declaratie, en kies daarna Kopiëren of ‘XML downloaden’.

Verwacht het systeem dat het bestand inleest bepaalde tagnamen? Hernoem de CSV-kolommen dan eerst met CSV-kolommen hernoemen en herschikken, zodat er niets automatisch hoeft te worden hernoemd.

Opties voor de XML-structuur

Onderliggende elementenDe standaard: <row><Customer>Smith &amp; Sons</Customer>…</row>. Behoudt regeleinden in waarden en past bij de meeste importprogramma’s.
AttributenEén zelfsluitend element per rij: <row Customer="Smith &amp; Sons" …/>. Compact; tabs en regeleinden in waarden worden geschreven als &#9;, &#10; en &#13;, zodat een parser ze behoudt.
Lege waarden weglatenStandaard uit, dus een lege cel wordt een leeg element, zoals <Ship_date/>. Staat het aan, dan wordt het element of attribuut in die rij weggelaten.
Inspringing2 spaties (standaard), 4 spaties, of Geen (geminimaliseerd), waarbij het hele document op één regel komt.
XML-declaratie toevoegenStandaard aan: de eerste regel is <?xml version="1.0" encoding="UTF-8"?>. Zet het uit als de XML in een ander document wordt opgenomen.

Voor de namen van het hoofdelement en het element per rij gelden dezelfde naamregels als voor kolomnamen. Een lege of ongeldige naam valt terug op rows of row, of krijgt een underscore ervoor.

Hoe kolomnamen XML-namen worden

  • Spaties worden _, en elk teken anders dan letters, cijfers, ., - en _ wordt _: Total (EUR) → Total__EUR_, e-mail:work → e-mail_work. Dubbele punten worden vervangen, dus er ontstaan geen namespace-voorvoegsels.
  • Een naam die begint met een cijfer, . of - krijgt een underscore vooraan (2024 total → _2024_total). Dat geldt ook voor een naam die begint met xml, in welke schrijfwijze ook, omdat XML die reserveert (xml_ref → _xml_ref).
  • Krijgen twee kolomnamen dezelfde naam, dan krijgt de tweede _2 erachter (a b en a_b → a_b, a_b_2). XML-namen zijn hoofdlettergevoelig, dus Name en name blijven verschillend.
  • Letters uit elk schrift blijven staan: Größe en 価格 zijn geldige XML-namen. Een lege kolomnaam wordt eerst Column 7 en daarna Column_7.
  • Elke naamswijziging staat onder de opties vermeld in de vorm old → new (oude naam → nieuwe naam), en een melding boven het voorbeeld geeft het aantal.

Hoe waarden worden geschreven

  • &, < en > worden in de tekst van elementen geëscapet; in attributen ook ". Verder worden waarden precies zo geschreven als in de CSV: 00731 houdt zijn nullen en er wordt geen type geraden.
  • XML 1.0 verbiedt de meeste stuurtekens (U+0000–U+001F behalve tab, line feed en carriage return), U+FFFE, U+FFFF en ongepaarde surrogaten, ook als ze geëscapet zijn. Die worden verwijderd, en het aantal betrokken waarden wordt getoond.
  • Komma’s, aanhalingstekens en regeleinden tussen aanhalingstekens worden gelezen volgens RFC 4180; een regeleinde blijft een echt regeleinde binnen een onderliggend element.
  • Het resultaat is altijd UTF-8.

Als een XML-parser of import het bestand weigert

  • Mijn importprogramma vindt een veld niet. Het is waarschijnlijk hernoemd. Bekijk de lijst onder de opties en hernoem de kolom in de CSV, of pas de koppeling in het ontvangende systeem aan.
  • Een parser meldt een fout in de codering. Open het bronbestand met de juiste codering onder Importinstellingen. De XML is alleen correct UTF-8 als de CSV goed is gedecodeerd.
  • Alles staat in één element. Het scheidingsteken is verkeerd geraden. Kies onder Importinstellingen komma, puntkomma, tab of verticale streep.
  • Ik heb CDATA, namespaces of een schema nodig. De converter schrijft alleen gewone elementen en attributen; voeg die zaken in een latere stap toe.

Grenzen en privacy

Bestanden tot 25 MB, 100.000 rijen of 2 miljoen cellen openen met een live voorbeeld van de eerste 200 rijen. Grotere bestanden worden in delen omgezet: het bestand wordt twee keer in stukken gelezen (eerst om de kolommen te meten, dan om te schrijven), een melding zegt dat de download het hele bestand bevat, en Kopiëren wordt niet aangeboden. Eén uitvoerbestand is maximaal 4 GB.

Het omzetten gebeurt in een achtergrondproces in dit tabblad, zodat de pagina blijft reageren; met Annuleren stop je het. Het CSV-bestand wordt nooit naar een server gestuurd.

Voorbeeld: een orderexport met kolomnamen die hernoemd moeten worden

Een orderexport met spaties en haakjes in de kolomnamen, een ampersand, punthaken en een lege datum, omgezet met de standaardinstellingen. Drie kolomnamen worden hernoemd; de lege Ship date wordt <Ship_date/>.

CSV
Order ID,Customer,Total (EUR),Ship date
10071,"Smith & Sons",249.00,2025-02-03
10072,"Café <Lumière>",18.50,
XML
<?xml version="1.0" encoding="UTF-8"?>
<rows>
  <row>
    <Order_ID>10071</Order_ID>
    <Customer>Smith &amp; Sons</Customer>
    <Total__EUR_>249.00</Total__EUR_>
    <Ship_date>2025-02-03</Ship_date>
  </row>
  <row>
    <Order_ID>10072</Order_ID>
    <Customer>Café &lt;Lumière&gt;</Customer>
    <Total__EUR_>18.50</Total__EUR_>
    <Ship_date/>
  </row>
</rows>

Vragen en antwoorden

Waarom is mijn kolomnaam veranderd?

XML-elementnamen mogen geen spaties en de meeste leestekens bevatten, mogen niet met een cijfer beginnen en niet met xml. De converter maakt de kleinste wijziging die een geldige, unieke naam oplevert, en vermeldt elke wijziging.

Kies ik elementen of attributen?

Gebruik onderliggende elementen, tenzij het ontvangende systeem om attributen vraagt. Elementen behouden regeleinden zoals ze zijn geschreven; bij attribuutwaarden normaliseren XML-parsers de witruimte. Daarom codeert de converter tabs en regeleinden daar als tekenverwijzingen.

Krijgen getallen of datums een type?

Nee. XML heeft geen ingebouwde waardetypen, dus elke waarde wordt geschreven als de tekst in de CSV. Typen komen uit het schema of uit het programma dat het bestand leest.

Standaarden en bronnen