ToolDeck

Conversor CSV para XML

Converta dados CSV para o formato XML

Experimente um exemplo

Entrada CSV

Saída XML

Roda localmente · Seguro para colar segredos
A saída XML aparecerá aqui…

O que é a conversão de CSV para XML?

A conversão de CSV para XML transforma valores separados por vírgula em documentos XML (Extensible Markup Language). Cada linha do CSV se torna um elemento XML, e cada cabeçalho de coluna é mapeado como nome de tag de um elemento filho. O resultado é um documento hierárquico e autodescritivo que pode ser validado por um esquema (XSD ou DTD) e processado com ferramentas padrão de XML como XSLT, XPath e parsers SAX/DOM.

O XML é um padrão de intercâmbio de dados desde que o W3C publicou a especificação XML 1.0 em 1998. Embora o JSON tenha substituído o XML em muitas APIs web, o XML ainda é o formato exigido por serviços web SOAP, feeds RSS/Atom, gráficos SVG, documentos Office Open XML (.docx, .xlsx), arquivos de recursos Android, configurações de build Maven/Gradle e setores regulados como saúde (HL7 CDA), finanças (FpML, XBRL) e governo (NIEM). Quando a fonte de dados é uma planilha ou exportação de banco de dados, a conversão CSV para XML é o caminho para integrá-los a esses sistemas.

Um conversor CSV para XML correto precisa lidar com os casos especiais do RFC 4180: campos entre aspas contendo vírgulas ou quebras de linha, aspas duplas escapadas e delimitadores variados. No lado do XML, ele deve escapar as cinco entidades XML predefinidas (& < > " '), gerar nomes de elementos válidos a partir dos cabeçalhos (substituindo espaços e caracteres especiais) e produzir saída bem formada com uma declaração XML adequada e codificação consistente.

Por que usar um conversor CSV para XML?

Escrever XML manualmente a partir de dados de planilha é lento e sujeito a erros. Esquecer uma tag de fechamento ou não escapar um ampersand produz XML inválido que quebra parsers. Este conversor cuida da análise, do escape e da geração de elementos em uma única etapa.

Conversão instantânea no navegador
Cole o CSV e obtenha saída XML bem formada com uma declaração adequada, elemento raiz e elementos filhos aninhados. Sem ferramentas de linha de comando nem instalações de biblioteca.
🔒
Dados privados
Toda a conversão é feita localmente no seu navegador com JavaScript. Seus dados CSV nunca são enviados para um servidor, nunca são registrados e nunca são armazenados fora da sua máquina.
🎯
XML válido e bem formado
A saída escapa entidades XML, sanitiza nomes de cabeçalhos em tags de elementos válidos e produz marcação corretamente aninhada que passa em qualquer validador ou linter XML.
📋
Suporte a qualquer dialeto CSV
Detecta automaticamente vírgulas, ponto e vírgula, tabulações e pipes como delimitadores. Suporta as regras de citação do RFC 4180, incluindo aspas duplas escapadas, campos multilinhas e arquivos UTF-8 com BOM.

Casos de uso de CSV para XML

Integração com SOAP e APIs legadas
Muitos sistemas corporativos ainda usam serviços web SOAP que exigem corpos de requisição em XML. Converta uma exportação de dados CSV em payloads XML que correspondam ao esquema WSDL do serviço antes de enviar as requisições.
Geração de arquivos de configuração
Gere listas de dependências Maven pom.xml, arquivos de recursos Android ou definições de beans do Spring a partir de uma planilha de dependências, strings ou entradas de configuração. Produza em lote configs XML a partir de uma única fonte CSV.
ETL em pipelines de dados
Alimente exportações CSV de bancos de dados ou ferramentas de análise em pipelines ETL baseados em XML. Ferramentas como Apache NiFi, Talend e SSIS aceitam entradas XML para fluxos de transformação que exigem validação de esquema em cada etapa.
Relatórios regulatórios e de conformidade
Setores como saúde (HL7 CDA), finanças (XBRL, FpML) e governo (NIEM) exigem submissões em XML. Converta dados tabulares de conformidade na estrutura XML exigida antes do envio.
Geração de feeds RSS e Atom
Transforme uma lista CSV de artigos, títulos e datas em um feed RSS 2.0 ou Atom. Fluxos de gerenciamento de conteúdo geralmente começam com uma planilha de posts que precisam ser publicados como feed de distribuição.
Ensino de conceitos fundamentais de XML
Estudantes aprendendo XML podem colar dados CSV familiares e ver a hierarquia de elementos resultante, o aninhamento e o escape de entidades. Comparar entrada e saída torna concretos conceitos abstratos como boa formação e validade.

Referência de mapeamento CSV para XML

Entender como cada parte de um arquivo CSV é mapeada para a estrutura XML ajuda a prever o formato de saída e ajustar os dados antes da conversão.

Conceito CSVEquivalente XMLDetalhes
CSV fileXML documentThe entire file maps to a root element containing all records
Header rowElement tag namesEach column header becomes the tag name for child elements
Data row<row> elementEach row becomes a repeating child element of the root
Cell valueText nodeCell content becomes the text inside the corresponding tag
Empty cellEmpty element or omittedCan be rendered as <field/> or excluded from output
Comma delimiterXML structureDelimiters are replaced by element nesting and closing tags

CSV vs XML

CSV é um formato plano baseado em delimitadores, sem esquema ou tipos de dados embutidos. XML é uma linguagem de marcação hierárquica e autodescritiva que suporta esquemas, namespaces e aninhamento complexo. A escolha entre eles depende dos requisitos do sistema que receberá os dados.

CSV
Texto simples, um registro por linha. Sem tipos de dados: todo valor é uma string. Sem hierarquia ou aninhamento. Tamanho de arquivo mínimo. Suportado universalmente por planilhas, bancos de dados e linguagens de script. Definido pelo RFC 4180. Ideal para transferência simples de dados tabulares entre sistemas que conhecem o layout das colunas.
XML
Marcação hierárquica com tags de abertura e fechamento. Suporta atributos, namespaces, conteúdo misto e seções CDATA. Pode ser validado com esquemas XSD ou DTD. Processado por XSLT, XPath, SAX e parsers DOM. Tamanho de arquivo maior que CSV devido à sobrecarga das tags. Exigido por APIs SOAP, Office Open XML, RSS/Atom e muitos setores regulados.

Exemplos de código

A seguir, exemplos funcionais de conversão de CSV para XML em diferentes linguagens. Cada exemplo analisa a linha de cabeçalho do CSV como nomes de tags de elementos, envolve cada linha de dados em um elemento contêiner e escapa entidades XML no conteúdo das células.

JavaScript (browser / Node.js)
// CSV string → XML with proper escaping
const csv = `name,age,city
Alice,30,Berlin
Bob,25,Tokyo`

function csvToXml(csv, rootTag = 'data', rowTag = 'row') {
  const rows = csv.trim().split('\n').map(r => r.split(','))
  const [headers, ...data] = rows
  const xmlRows = data.map(row => {
    const fields = headers.map((h, i) => {
      const val = (row[i] || '').replace(/&/g, '&amp;')
        .replace(/</g, '&lt;').replace(/>/g, '&gt;')
      return `    <${h}>${val}</${h}>`
    }).join('\n')
    return `  <${rowTag}>\n${fields}\n  </${rowTag}>`
  }).join('\n')
  return `<?xml version="1.0" encoding="UTF-8"?>\n<${rootTag}>\n${xmlRows}\n</${rootTag}>`
}

console.log(csvToXml(csv))
// → <?xml version="1.0" encoding="UTF-8"?>
// → <data><row><name>Alice</name><age>30</age>...</row>...</data>
Python
import csv, io
from xml.etree.ElementTree import Element, SubElement, tostring
from xml.dom.minidom import parseString

csv_string = """name,age,city
Alice,30,Berlin
Bob,25,Tokyo"""

reader = csv.DictReader(io.StringIO(csv_string))
root = Element('data')

for row in reader:
    row_el = SubElement(root, 'row')
    for key, value in row.items():
        child = SubElement(row_el, key)
        child.text = value

# Pretty-print with declaration
raw = tostring(root, encoding='unicode')
pretty = parseString(raw).toprettyxml(indent='  ')
print(pretty)
# → <?xml version="1.0" ?>
# → <data>
# →   <row>
# →     <name>Alice</name>
# →     <age>30</age>
# →     <city>Berlin</city>
# →   </row>
# →   ...
# → </data>
Go
package main

import (
	"encoding/csv"
	"encoding/xml"
	"fmt"
	"os"
	"strings"
)

type Field struct {
	XMLName xml.Name
	Value   string `xml:",chardata"`
}

type Row struct {
	XMLName xml.Name `xml:"row"`
	Fields  []Field
}

type Data struct {
	XMLName xml.Name `xml:"data"`
	Rows    []Row
}

func main() {
	input := "name,age,city\nAlice,30,Berlin\nBob,25,Tokyo"
	r := csv.NewReader(strings.NewReader(input))
	records, _ := r.ReadAll()
	headers := records[0]

	var data Data
	for _, rec := range records[1:] {
		row := Row{}
		for i, h := range headers {
			row.Fields = append(row.Fields, Field{
				XMLName: xml.Name{Local: h},
				Value:   rec[i],
			})
		}
		data.Rows = append(data.Rows, row)
	}

	out, _ := xml.MarshalIndent(data, "", "  ")
	fmt.Println(xml.Header + string(out))
	// → <?xml version="1.0" encoding="UTF-8"?>
	// → <data><row><name>Alice</name>...</row>...</data>
}
CLI (csvkit / xmlstarlet)
# Using Python's csv and xml modules via one-liner
python3 -c "
import csv, sys
from xml.etree.ElementTree import Element, SubElement, tostring
from xml.dom.minidom import parseString

reader = csv.DictReader(sys.stdin)
root = Element('data')
for row in reader:
    r = SubElement(root, 'row')
    for k, v in row.items():
        SubElement(r, k).text = v
print(parseString(tostring(root, encoding='unicode')).toprettyxml(indent='  '))
" < data.csv

# Using Miller (mlr) — a dedicated CSV/JSON/XML tool
mlr --icsv --oxml cat data.csv

Perguntas frequentes

Como funciona a conversão de CSV para XML?
O conversor lê a primeira linha do CSV como cabeçalhos de coluna. Cada linha subsequente se torna um elemento XML, e cada valor de célula é envolvido em um elemento filho com o nome do cabeçalho correspondente. O resultado é um documento XML bem formado com um elemento raiz contendo um elemento filho por linha de dados.
O que acontece com caracteres especiais como & e < nos dados CSV?
O conversor escapa as cinco entidades XML predefinidas: & vira &amp;, < vira &lt;, > vira &gt;, " vira &quot; e ' vira &apos;. Isso produz XML válido que não quebrará parsers nem causará erros de boa formação.
Posso usar nomes de tags personalizados para os elementos raiz e de linha?
Sim. A ferramenta permite definir o nome do elemento raiz (padrão: "data") e o nome do elemento de linha (padrão: "row"). Os cabeçalhos de coluna do CSV sempre se tornam os nomes dos elementos filhos. Se um cabeçalho contiver espaços ou caracteres inválidos em nomes de elementos XML, a ferramenta os sanitiza automaticamente.
Qual é a diferença entre CSV para XML e CSV para JSON?
CSV para XML produz um documento de marcação hierárquico com tags de abertura/fechamento, uma declaração XML e suporte a validação por esquema (XSD/DTD). CSV para JSON produz um array mais leve de objetos chave-valor. Use XML quando o sistema de destino exigir (APIs SOAP, formatos regulados, feeds RSS). Use JSON para APIs REST, frontends JavaScript e bancos de dados NoSQL.
Como validar o XML gerado?
Cole a saída em qualquer validador XML para verificar a boa formação (aninhamento correto, escape adequado de entidades, tags correspondentes). Para validação por esquema, forneça um arquivo XSD e use uma ferramenta como xmllint, Xerces ou um validador XSD online. O XML produzido por esta ferramenta é sempre bem formado, mas a validade de esquema depende de a estrutura corresponder ao seu esquema alvo.
O conversor suporta arquivos CSV grandes?
A ferramenta roda no seu navegador, então o desempenho depende da memória disponível. Arquivos de até alguns megabytes (dezenas de milhares de linhas) convertem sem problemas em hardware moderno. Para arquivos muito grandes (100 MB+), considere uma ferramenta de linha de comando como os módulos csv e xml.etree do Python ou os pacotes encoding/csv e encoding/xml do Go, que processam os dados em fluxo sem carregar tudo na memória.
O XML gerado é compatível com transformações XSLT?
Sim. A saída é XML padrão bem formado com uma declaração e estrutura de elementos consistente. Você pode aplicar qualquer folha de estilos XSLT para transformá-lo em HTML, outro esquema XML ou texto simples. A estrutura previsível (raiz > linha > elementos de campo) torna simples escrever seletores XPath e templates XSLT.