XML para CSV
Este conversor transforma XML em CSV RFC 4180 no seu navegador. Os filhos repetidos do elemento raiz se tornam linhas, seus atributos se tornam colunas prefixadas com @, e o texto do elemento vai para colunas nomeadas com terminações CRLF e aspas apenas onde a gramática exigir. Nada é enviado.
XML para CSV: explicação
A maioria dos XMLs reais que se comportam como uma tabela compartilham uma forma: um elemento contendo muitos filhos com o mesmo nome, cada filho representando um registro — um catálogo de livros, um log de entradas, uma lista de pedidos. Este conversor procura exatamente essa forma. Encontre o filho repetido da raiz e o resto é mecânico: cada filho se torna uma linha, seus atributos e elementos internos se tornam colunas, e a união de cada coluna em todas as linhas se torna o cabeçalho, na ordem em que foram vistos pela primeira vez.
As convenções são as mesmas que toda ponte XML usa, e são explicitadas aqui: um atributo mantém seu nome mas ganha um prefixo @, então id="bk101" se torna a coluna @id; o texto de um elemento se torna seu valor #text; e um elemento filho que se repete dentro de um registro explode em colunas indexadas, em vez de ser mesclado silenciosamente. O lado do CSV segue estritamente RFC 4180 — terminações de linha CRLF, escape de aspas duplas apenas quando um campo contém uma vírgula, aspa ou nova linha — e os valores cruzam como estão, sem coerção numérica para reformatar um CEP.
Tudo é executado nesta aba do navegador. O XML é analisado por um motor na página e o CSV é construído a partir da árvore analisada; nenhum dos dois toca a rede — abra o DevTools, veja o painel de Rede permanecer silencioso, e a afirmação se prova.
Construindo o XML a partir de uma exportação de planilha? O Conversor de CSV para XML aplica essas mesmas convenções na direção oposta.
O que o lado do CSV garante — aspas, CRLF, aspas duplicadas — está devidamente documentado no Guia RFC 4180 deste site.
Como a conversão realmente funciona
O documento é tokenizado uma vez em uma árvore, e a leitura tabular é um passo separado e honesto: a árvore ou tem a forma de filhos repetidos ou não tem, e fingir o contrário produziria um CSV que parece correto mas significa outra coisa. Quando a forma é encontrada, cada registro é achatado em caminhos de folha, e a linha de cabeçalho é a união ordenada desses caminhos em todos os registros — o primeiro visto primeiro, então a ordem das colunas é estável e previsível, não alfabética por acidente.
- Análise: um analisador de única passagem constrói a árvore de elementos; comentários, DOCTYPE e instruções de processamento são ignorados, e um segundo elemento raiz é rejeitado com o número da linha.
- Seleção: o primeiro elemento filho repetido da raiz fornece as linhas — <catalog> cheio de filhos <book> é o caso clássico.
- Achatamento: atributos se tornam colunas @, texto de elemento se torna #text, e aninhamentos mais profundos se tornam caminhos com ponto como author.#text.
- Emissão: uma linha terminada em CRLF por registro, campos entre aspas apenas quando uma vírgula, aspa ou nova linha o exigirem.
Como recursos XML mapeiam para colunas
O XML tem três formas de carregar um valor — atributos, conteúdo de texto e elementos filhos — e uma grade plana tem uma: uma coluna nomeada. O mapeamento abaixo é o padrão, escolhido para que nenhum dois recursos da fonte colidam na saída e para que o próprio cabeçalho diga de que tipo de valor cada coluna veio.
| Construto XML | Coluna | Exemplo de célula |
|---|---|---|
| atributo id="bk101" | @id | bk101 |
| texto de elemento <price>5.95</price> | price.#text | 5.95 |
| elemento com atributos e texto | @sku plus #text | A-1, Widget |
| netos repetidos | book[0].#text, book[1].#text | one, two |
Valores cruzam como estão
Não há etapa de inferência de tipo entre a árvore XML e o CSV, deliberadamente. O texto XML é texto, então 44.95 chega como os caracteres 44.95, um CEP mantém seu zero à esquerda, e um valor como 1e5 não é expandido para 100000. Entidades são carregadas da mesma forma: o analisador não é um analisador validador e não reescreve referências a entidades, então o que chega em uma célula é exatamente o que o texto fonte continha. Se o destino precisar de valores tipados, combine esta ferramenta com o conversor de CSV para SQL, que infere tipos das células naquele ponto, onde a escolha é visível e reversível.
- Números mantêm seus caracteres exatos — nenhuma precisão é inventada ou perdida.
- Espaço em branco dentro de um nó de texto é preservado; espaço em branco entre elementos nunca se torna dado.
- Elementos vazios (<debug/>) produzem uma coluna com célula vazia em vez de desaparecerem.
Onde este conversor se recusa a adivinhar
Duas estruturas forçariam o conversor a inventar informação, e ambas são rejeitadas com uma mensagem específica. A primeira é um documento sem elemento filho repetido — uma única raiz contendo nada tabulável não pode se tornar linhas sem inventar uma forma de linha. A segunda é um documento com mais de um elemento raiz, que não é um documento de todo; o erro nomeia o elemento ofensor e sua linha, e nada é escrito. Um fragmento que quase se encaixa ainda é um fragmento, e a correção mais rápida é deletar ou renomear o elemento wrapper antes de colar.
- Sem filhos repetidos: erro nomeando a forma esperada <root><item>…</item></root>.
- Múltiplas raízes: rejeitado, com o segundo elemento e sua linha reportados.
- Tags de fechamento incompatíveis: rejeitado no ponto onde a árvore deixa de ser bem formada.
Perguntas frequentes
Converter XML para CSV envia meu arquivo para algum lugar?
Não. A análise do XML e a construção do CSV acontecem dentro desta aba do navegador com JavaScript que foi carregado uma vez quando a página abriu. Não há rota de API para enviar dados, e a Content-Security-Policy da página define connect-src 'self', então o navegador bloquearia qualquer requisição de saída. Ambas as afirmações são verificáveis no DevTools: veja o painel de Rede enquanto converte — nenhuma requisição aparece.
Quais elementos XML se tornam as linhas do CSV?
O conversor olha para os filhos do elemento raiz e pega o repetido — o elemento com o mesmo nome que aparece muitas vezes, como <book> dentro de <catalog>. Cada ocorrência se torna uma linha. Se nenhum filho se repete, cada filho com formato de objeto é tratado como seu próprio registro, e uma raiz com nada tabulável dentro é rejeitada com um erro nomeado, em vez de ser achatada em um arquivo de uma linha enganoso.
Por que alguns nomes de coluna começam com @ ou contêm #text?
Os prefixos registram onde cada valor estava no XML. Um prefixo @ marca um atributo — id="bk101" se torna a coluna @id — e #text marca o próprio texto de um elemento, que precisa de um nome próprio quando o elemento também tem atributos ou filhos. Os prefixes evitam colisões: um elemento chamado id e um atributo chamado id competiriam por uma coluna, e o cabeçalho não diria qual era qual.
Números são convertidos, ou os valores ficam como escritos?
Valores ficam exatamente como escritos. A árvore mantém texto como strings e o escritor de CSV não faz inferência de tipo, então 44.95 cruza como 44.95, um CEP como 02134 mantém seu zero à esquerda, e nada é reformatado atrás de suas costas. Esta é a mesma política que o conversor XML para YAML do site segue, então um arquivo convertido de qualquer um dos lados mostra os mesmos valores caractere por caractere.
Campos entre aspas e quebras de linha são tratadas na saída?
Segundo RFC 4180: um campo contendo uma vírgula, uma aspa dupla ou uma nova linha é envolto em aspas duplas, e uma aspa dentro de tal campo é duplicada. Linhas terminam com CRLF, o terminador que a especificação define e que o software de planilha espera. Campos são colocados entre aspas apenas quando a gramática o exige — sem aspas decorativas — o que mantém o arquivo menor e mais fácil de diff que uma exportação que aspa tudo.
O que acontece com comentários XML e a linha DOCTYPE?
Eles são ignorados. Comentários, a declaração DOCTYPE e instruções de processamento não carregam dado tabular, então a árvore simplesmente nunca os inclui; a análise continua a partir da estrutura do elemento. A única coisa que o conversor insiste é em um único elemento raiz — um documento com um segundo elemento de nível superior é rejeitado com o nome do elemento e número da linha, porque duas raízes são dois documentos, não um conjunto de linhas.
Quais ferramentas relacionadas devo usar a seguir?
- CSV para XMLConversor que roda no seu navegadorAbrir
- Regras de CSV da RFC 4180Guia em linguagem simplesAbrir
- Converter XML em JSONConverte sem perder atributos nem listas de um itemAbrir
- Converter CSV em JSONLê a exportação da planilha, aspas e tudoAbrir
- O que é JSONGuia em linguagem simplesAbrir
- Validar JSONAponta o erro com linha e coluna e corrige num cliqueAbrir