ToolDeck

Convertidor CSV a XML

Convierte datos CSV a formato XML

Prueba un ejemplo

Entrada CSV

Salida XML

Se ejecuta localmente · Es seguro pegar secretos
La salida XML aparecerá aquí…

¿Qué es la conversión de CSV a XML?

La conversión de CSV a XML transforma valores separados por comas en documentos de Lenguaje de Marcado Extensible (XML). Cada fila del CSV se convierte en un elemento XML, y cada cabecera de columna se mapea como nombre de etiqueta de un elemento hijo. El resultado es un documento jerárquico y autodescriptivo que los sistemas pueden validar contra un esquema (XSD o DTD) y procesar con herramientas XML estándar como XSLT, XPath y los analizadores SAX/DOM.

XML ha sido un estándar de intercambio de datos desde que el W3C publicó la especificación XML 1.0 en 1998. Aunque JSON ha reemplazado a XML en muchas APIs web, XML sigue siendo el formato requerido para servicios web SOAP, feeds RSS/Atom, gráficos SVG, documentos Office Open XML (.docx, .xlsx), archivos de recursos de Android, configuraciones de compilación de Maven/Gradle, y sectores regulados como sanidad (HL7 CDA), finanzas (FpML, XBRL) y administración pública (NIEM). Cuando los datos de origen son una hoja de cálculo o una exportación de base de datos, la conversión de CSV a XML es la forma de introducirlos en estos sistemas.

Un conversor correcto de CSV a XML debe gestionar los casos límite de RFC 4180: campos entrecomillados que contienen comas o saltos de línea, comillas dobles escapadas y delimitadores variables. Por el lado de XML, debe escapar las cinco entidades XML predefinidas (& < > " '), generar nombres de elemento válidos a partir de las cabeceras (reemplazando espacios y caracteres especiales) y producir una salida bien formada con una declaración XML correcta y una codificación consistente.

¿Por qué usar un conversor de CSV a XML?

Escribir XML a mano a partir de datos de hojas de cálculo es lento y propenso a errores. Olvidar una etiqueta de cierre o no escapar un ampersand produce XML no válido que rompe los analizadores posteriores. Este conversor gestiona el análisis, el escape y la generación de elementos en un solo paso.

Conversión instantánea en el navegador
Pega el CSV y obtén una salida XML bien formada con una declaración correcta, un elemento raíz y elementos hijo anidados. No se necesitan herramientas de línea de comandos ni instalaciones de librerías.
🔒
Tus datos permanecen privados
Toda la conversión se ejecuta localmente en tu navegador usando JavaScript. Los datos CSV nunca se envían a un servidor, nunca se registran y nunca se almacenan fuera de tu máquina.
🎯
Genera XML válido y bien formado
La salida escapa las entidades XML, sanea los nombres de cabecera convirtiéndolos en etiquetas de elemento válidas y produce marcado correctamente anidado que supera cualquier validador o linter de XML.
📋
Compatible con cualquier dialecto CSV
Detecta automáticamente comas, punto y coma, tabuladores y pipes como delimitadores. Soporta las reglas de entrecomillado de RFC 4180, incluyendo comillas dobles escapadas, campos multilínea y archivos UTF-8 con BOM.

Casos de uso de CSV a XML

Integración con SOAP y APIs heredadas
Muchos sistemas empresariales siguen usando servicios web SOAP que requieren cuerpos de solicitud en XML. Convierte una exportación CSV de datos en cargas XML que coincidan con el esquema WSDL del servicio antes de enviar las solicitudes.
Generación de archivos de configuración
Genera listas de dependencias para pom.xml de Maven, archivos de recursos de Android o definiciones de beans de Spring a partir de una hoja de cálculo de dependencias, cadenas o entradas de configuración. Produce en lote archivos de configuración XML desde una única fuente CSV.
ETL en pipelines de datos
Introduce exportaciones CSV de bases de datos o herramientas de análisis en pipelines ETL basados en XML. Herramientas como Apache NiFi, Talend y SSIS aceptan entradas XML para flujos de trabajo de transformación que requieren validación de esquema en cada etapa.
Informes regulatorios y de cumplimiento
Sectores como sanidad (HL7 CDA), finanzas (XBRL, FpML) y administración pública (NIEM) exigen envíos en formato XML. Convierte los datos tabulares de cumplimiento a la estructura XML requerida antes de la presentación.
Generación de feeds RSS y Atom
Transforma una lista CSV de artículos, títulos y fechas en un feed RSS 2.0 o Atom. Los flujos de trabajo de gestión de contenidos suelen comenzar con una hoja de cálculo de publicaciones que deben convertirse en un feed de sindicación.
Enseñanza de fundamentos de XML
Los estudiantes que aprenden XML pueden pegar datos CSV conocidos y ver la jerarquía de elementos resultante, el anidamiento y el escape de entidades. Comparar la entrada y la salida hace concretos conceptos abstractos como la buena formación y la validez.

Referencia de mapeo de CSV a XML

Entender cómo cada parte de un archivo CSV se mapea a la estructura XML te ayuda a predecir el formato de salida y ajustar los datos antes de la conversión.

Concepto CSVEquivalente XMLDetalles
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 es un formato plano basado en delimitadores, sin esquema ni tipos de datos incorporados. XML es un lenguaje de marcado jerárquico y autodescriptivo que admite esquemas, espacios de nombres y anidamiento complejo. La elección entre ambos depende de los requisitos del sistema de destino.

CSV
Texto plano, un registro por línea. Sin tipos de datos: todos los valores son cadenas. Sin jerarquía ni anidamiento. Tamaño de archivo mínimo. Universalmente compatible con hojas de cálculo, bases de datos y lenguajes de scripting. Definido por RFC 4180. Ideal para la transferencia de datos tabulares simples entre sistemas que conocen el diseño de las columnas.
XML
Marcado jerárquico con etiquetas de apertura y cierre. Soporta atributos, espacios de nombres, contenido mixto y secciones CDATA. Puede validarse contra esquemas XSD o DTD. Procesado por XSLT, XPath, SAX y analizadores DOM. Mayor tamaño de archivo que CSV debido a la sobrecarga de las etiquetas. Requerido por APIs SOAP, Office Open XML, RSS/Atom y muchos sectores regulados.

Ejemplos de código

A continuación se presentan ejemplos funcionales de conversión de CSV a XML en distintos lenguajes. Cada ejemplo analiza la fila de cabecera del CSV como nombres de etiqueta de elemento, envuelve cada fila de datos en un elemento contenedor y escapa las entidades XML en el contenido de las celdas.

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

Preguntas frecuentes

¿Cómo funciona la conversión de CSV a XML?
El conversor lee la primera fila del CSV como cabeceras de columna. Cada fila posterior se convierte en un elemento XML, y el valor de cada celda se envuelve en un elemento hijo con el nombre de su cabecera de columna. El resultado es un documento XML bien formado con un elemento raíz que contiene un elemento hijo por cada fila de datos.
¿Qué ocurre con los caracteres especiales como & y < en los datos CSV?
El conversor escapa las cinco entidades XML predefinidas: & se convierte en &amp;, < en &lt;, > en &gt;, " en &quot; y ' en &apos;. Esto produce XML válido que no romperá los analizadores ni causará errores de buena formación.
¿Puedo usar nombres de etiqueta personalizados para los elementos raíz y fila?
Sí. La herramienta permite establecer el nombre del elemento raíz (por defecto: "data") y el nombre del elemento fila (por defecto: "row"). Las cabeceras de columna del CSV siempre se convierten en los nombres de los elementos hijo. Si una cabecera contiene espacios o caracteres no válidos en nombres de elementos XML, la herramienta los sanea automáticamente.
¿Cuál es la diferencia entre CSV a XML y CSV a JSON?
CSV a XML produce un documento de marcado jerárquico con etiquetas de apertura y cierre, una declaración XML y soporte para validación de esquema (XSD/DTD). CSV a JSON produce un array más ligero de objetos clave-valor. Usa XML cuando tu sistema de destino lo requiera (APIs SOAP, formatos regulados, feeds RSS). Usa JSON para APIs REST, frontends en JavaScript y bases de datos NoSQL.
¿Cómo valido la salida XML generada?
Pega la salida en cualquier validador XML para comprobar la buena formación (anidamiento correcto, escape de entidades, etiquetas coincidentes). Para la validación de esquema, proporciona un archivo XSD y usa una herramienta como xmllint, Xerces o un validador XSD en línea. El XML producido por esta herramienta siempre es bien formado, pero la validez respecto a un esquema depende de si la estructura coincide con tu esquema de destino.
¿El conversor gestiona archivos CSV grandes?
La herramienta se ejecuta en tu navegador, por lo que el rendimiento depende de la memoria disponible. Los archivos de hasta unos pocos megabytes (decenas de miles de filas) se convierten sin problemas en hardware moderno. Para archivos muy grandes (100 MB o más), considera usar una herramienta de línea de comandos como los módulos csv y xml.etree de Python o los paquetes encoding/csv y encoding/xml de Go, que procesan los datos como un flujo sin cargar todo en memoria.
¿El XML generado es compatible con transformaciones XSLT?
Sí. La salida es XML estándar bien formado con una declaración y una estructura de elementos consistente. Puedes aplicar cualquier hoja de estilos XSLT para transformarlo en HTML, otro esquema XML o texto plano. La estructura predecible (raíz > fila > elementos de campo) facilita la escritura de selectores XPath y plantillas XSLT.