100 % locale — i tuoi dati non lasciano mai il tuo browser

XML in CSV — una riga per elemento

Trasforma elementi XML ripetuti in righe. I nomi dei figli diventano le colonne, pronto da aprire in un foglio di calcolo o da dare a uno script.

Istantaneo Privato Zero cookie
Delimitatore
Inverti: CSV → XML

Input XML

Output CSV

Che cosa fa questo strumento

Individua l’elemento ripetuto e trasforma ogni occorrenza in una riga.

<ordini>
  <ordine id="1"><cliente>Ada</cliente><totale>42</totale></ordine>
  <ordine id="2"><cliente>Alan</cliente><totale>17</totale></ordine>
</ordini>
cliente,totale,id
Ada,42,1
Alan,17,2

Gli involucri a chiave unica vengono attraversati: <ordini><ordine>… non richiede alcuna impostazione. Anche un involucro con un proprio attributo — <ordini totale="2"> — lo è: quell’attributo descrive la collezione, non una riga, e quindi non diventa una colonna. Un attributo posto su una riga, sì.

Gli attributi sono colonne

Un identificatore ospitato in un attributo è un dato come un altro. @_id diventa la colonna id.

Il prefisso resta in un solo caso: quando un elemento figlio porta già quel nome. <row id="1"><id>x</id></row> dà due colonne, id e @_id, perché sono due cose diverse e fonderle ne farebbe sparire una. Un interruttore elimina del tutto gli attributi se la tua tabella deve venire solo dagli elementi.

Una riga è una tabella

Un export di un solo record si converte come gli altri. Vale la pena dirlo perché prima non era così: XML verso JSON restituisce un oggetto e non un array quando l’elemento non è ripetuto, e pretendere l’array rifiutava un documento del tutto ordinario.

Un elemento radice che contiene soltanto testo resta rifiutato: un valore non è una tabella, e far finta del contrario non aiuterebbe nessuno.

Le righe che non si somigliano

L’intestazione è l’unione di tutto ciò che si è visto, nell’ordine di prima apparizione. La riga a cui manca una colonna riceve una cella vuota:

<r><row><a>1</a></row><row><a>2</a><b>3</b></row></r>
a,b
1,
2,3

Un export irregolare è normale. Scartare la colonna in più, o la riga che non ce l’ha, perderebbe dati per amore d’ordine.

Che cosa una cella non può contenere

Una cella porta un valore. Quando un elemento contiene un sottoalbero, quel sottoalbero viene scritto come JSON dentro la cella anziché sparso su nomi di colonna inventati. È brutto ed è onesto: nulla va perduto, e vedi esattamente che cosa c’era.

Privato per progettazione

Tutto viene eseguito localmente nel browser con JavaScript. I tuoi dati non vengono mai caricati, quindi lo strumento è sicuro per contenuti sensibili e funziona anche offline.

Domande frequenti

Dov’è finito il mio attributo id? Prima spariva.
Ora è una colonna. `<row id="1">` dà una colonna `id` accanto a quelle che vengono dagli elementi figli: un identificatore ospitato in un attributo è un dato come un altro, e perderlo in silenzio era un difetto reale di questo strumento, trovato scrivendo questa pagina. Se un elemento figlio si chiama già `id`, l’attributo conserva il prefisso `@_` perché le due colonne restino distinte.
Perché un elemento annidato esce come JSON nella cella?
Perché una cella CSV porta un valore e il tuo elemento porta un sottoalbero. Appiattirlo in colonne `padre.figlio` inventerebbe una convenzione di nomi che il tuo consumatore non ha approvato; il JSON nella cella è almeno inequivocabile e reversibile. Appiattisci prima di convertire se vuoi colonne vere.
Le mie righe non hanno tutte gli stessi figli. Che succede?
L’intestazione è l’unione di tutti gli elementi e attributi incontrati, nell’ordine di prima apparizione, e la riga a cui ne manca uno riceve una cella vuota. Nulla viene scartato perché irregolare: un export in cui solo alcuni record hanno un secondo nome è normale, non un errore.

Convertitori correlati