100 % local — seus dados nunca saem do seu navegador

XML para CSV — uma linha por elemento

Transforme elementos XML repetidos em linhas. Os nomes dos filhos viram as colunas, pronto para abrir numa planilha ou passar a um script.

Instantâneo Privado Zero cookies
Delimitador

Entrada XML

Saída CSV

O que esta ferramenta faz

Ela encontra o elemento repetido e faz de cada ocorrência uma linha.

<pedidos>
  <pedido id="1"><cliente>Ada</cliente><total>42</total></pedido>
  <pedido id="2"><cliente>Alan</cliente><total>17</total></pedido>
</pedidos>
cliente,total,id
Ada,42,1
Alan,17,2

Invólucros de chave única são atravessados: <pedidos><pedido>… não precisa de configuração. Um invólucro com atributo próprio — <pedidos total="2"> — também: esse atributo descreve a coleção, não uma linha, e por isso não vira coluna. Um atributo posto numa linha, sim.

Os atributos são colunas

Um identificador guardado num atributo é dado como qualquer outro. @_id vira a coluna id.

O prefixo é mantido num único caso: quando um elemento filho já tem esse nome. <row id="1"><id>x</id></row> dá duas colunas, id e @_id, porque são duas coisas diferentes e fundi-las faria uma delas sumir. Uma opção descarta os atributos por completo se a sua tabela deve vir só dos elementos.

Uma linha é uma tabela

Um export de um único registro converte como qualquer outro. Vale dizer porque antes não era assim: XML para JSON devolve um objeto e não um array quando o elemento não se repete, e exigir o array rejeitava um documento perfeitamente comum.

Um elemento raiz que só contém texto continua sendo recusado: um valor não é uma tabela, e fingir o contrário não ajudaria ninguém.

As linhas que não se parecem

O cabeçalho é a união de tudo o que foi visto, na ordem de aparição. A linha à qual falta uma coluna recebe célula vazia:

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

Um export irregular é normal. Descartar a coluna a mais, ou a linha que não a tem, perderia dados por gosto de arrumação.

O que uma célula não pode conter

Uma célula carrega um valor. Quando um elemento contém uma subárvore, essa subárvore é escrita como JSON dentro da célula em vez de espalhada por nomes de coluna inventados. É feio e é honesto: nada se perde, e você vê exatamente o que havia.

Privado por padrão

Tudo é executado localmente no seu navegador com JavaScript. Os seus dados nunca são enviados para um servidor, o que torna a ferramenta segura para conteúdo sensível e funciona offline.

Perguntas frequentes

Cadê meu atributo id? Antes ele sumia.
Agora é uma coluna. `<row id="1">` dá uma coluna `id` ao lado das que vêm dos elementos filhos: um identificador guardado num atributo continua sendo dado, e perdê-lo em silêncio era um defeito real desta ferramenta, encontrado ao escrever esta página. Se um elemento filho já se chama `id`, o atributo mantém o prefixo `@_` para as duas colunas seguirem distintas.
Por que um elemento aninhado aparece como JSON na célula?
Porque uma célula CSV carrega um valor e o seu elemento carrega uma subárvore. Achatá-la em colunas `pai.filho` inventaria uma convenção de nomes que o seu consumidor não aprovou; JSON na célula é ao menos inequívoco e reversível. Achate antes de converter se quiser colunas de verdade.
Minhas linhas não têm todas os mesmos filhos. O que acontece?
O cabeçalho é a união de todos os elementos e atributos vistos, na ordem em que apareceram, e a linha à qual falta um recebe célula vazia. Nada é descartado por ser irregular: um export em que só alguns registros têm nome do meio é normal, não um erro.

Conversores relacionados