ToolDeck

XML a YAML

Convierte XML a formato YAML

Prueba un ejemplo

Entrada XML

Salida YAML

Se ejecuta localmente · Es seguro pegar secretos
El YAML aparecerá aquí…

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

La conversión de XML a YAML transforma datos del Lenguaje de Marcado Extensible (XML) a YAML Ain't Markup Language (YAML). XML usa etiquetas con corchetes angulares y atributos para describir datos jerárquicos, mientras que YAML representa las mismas estructuras mediante indentación y pares clave-valor en texto plano. Convertir XML a YAML online es una tarea habitual al migrar configuración de sistemas basados en XML, como Java Spring, Maven o .NET, a plataformas que prefieren YAML, como Kubernetes, Ansible, GitHub Actions o Docker Compose.

Los dos formatos difieren en sus modelos de datos. XML trata todo como texto por defecto y depende de definiciones de esquema (XSD, DTD) para la aplicación de tipos. YAML tiene tipos nativos: cadenas, enteros, flotantes, booleanos, nulos, secuencias (matrices) y mapeos (objetos). Durante la conversión, valores como "true", "5432" y "3.14" pueden interpretarse como tipos nativos de YAML en lugar de permanecer como cadenas. Un conversor cuidadoso entrecomilla estos valores para preservar la representación textual original del XML.

XML también admite construcciones sin equivalente en YAML: atributos, espacios de nombres, instrucciones de procesamiento, secciones CDATA y comentarios. La conversión debe elegir una convención para representar los atributos (habitualmente claves con prefijo de guion bajo, como _attr) y decidir si descartar o aplanar el resto. Entender estos compromisos antes de convertir te ayuda a elegir la herramienta adecuada, configurarla correctamente y verificar que la salida YAML refleja la intención original del XML.

XML input
<server>
  <host>db.example.com</host>
  <port>5432</port>
  <credentials admin="true">
    <username>deploy</username>
    <password>s3cret</password>
  </credentials>
  <options>
    <option>ssl=true</option>
    <option>timeout=30</option>
  </options>
</server>
YAML output
server:
  host: db.example.com
  port: "5432"
  credentials:
    _admin: "true"
    username: deploy
    password: s3cret
  options:
    option:
      - ssl=true
      - timeout=30

¿Por qué usar un conversor de XML a YAML online?

Escribir un script de conversión a mano implica gestionar el mapeo de atributos, la detección de matrices en elementos repetidos y los casos límite de coerción de tipos en YAML. Un conversor en el navegador resuelve todo eso en un solo paso, permitiéndote inspeccionar la salida YAML y copiarla directamente en tus archivos de configuración.

Conversión instantánea
Pega tu XML y obtén la salida YAML en milisegundos. Sin instalación de bibliotecas, sin paso de compilación, sin scripts que mantener.
🔒
Procesamiento con privacidad primero
La conversión se ejecuta íntegramente en tu navegador mediante JavaScript. Tus datos XML permanecen en tu máquina y nunca se envían a ningún servidor.
🔀
Gestión de atributos y matrices
Los atributos XML se asignan a claves con prefijo. Los elementos hermanos repetidos se agrupan automáticamente en secuencias YAML, preservando las estructuras de lista.
📋
Sin cuenta requerida
Abre la página, pega tu XML y copia el resultado YAML. Sin registro, sin clave de API, sin límites de uso.

Casos de uso de XML a YAML

Desarrollo frontend
Convierte fragmentos de configuración XML de herramientas de compilación antiguas (Ant, Maven) a YAML para pipelines de CI modernas como GitHub Actions o GitLab CI que esperan archivos de configuración en YAML.
Ingeniería backend
Migra definiciones de beans XML de Spring a formato application.yml de Spring Boot, o convierte secciones de app.config de .NET a YAML para despliegues en contenedores.
DevOps e infraestructura
Transforma descriptores de despliegue basados en XML (Tomcat server.xml, IIS web.config) en equivalentes YAML para manifiestos de Kubernetes, charts de Helm o playbooks de Ansible.
QA y pruebas
Convierte fixtures de prueba XML o configuraciones de JUnit a YAML para frameworks de pruebas que admiten fuentes de datos en YAML, como pytest con fixtures YAML o Robot Framework.
Ingeniería de datos
Transforma exportaciones de datos XML de sistemas empresariales (SAP, Oracle) a YAML para su ingestión por herramientas ETL como dbt o Airflow que utilizan configuración y esquemas basados en YAML.
Aprendizaje y documentación
Los estudiantes y escritores técnicos pueden pegar muestras XML para ver cómo los elementos, atributos y el anidamiento se traducen a indentación, secuencias y mapeos en YAML.

Referencia de correspondencia XML a YAML

XML y YAML tienen modelos de datos distintos. La tabla siguiente muestra cómo se corresponde cada construcción XML con su equivalente YAML. Los atributos se convierten habitualmente a claves con prefijo de guion bajo, y los elementos repetidos se convierten en secuencias YAML. Algunas construcciones, como los comentarios e instrucciones de procesamiento, no tienen representación en YAML y se descartan durante la conversión.

Construcción XMLEjemplo XMLEquivalente YAML
Element<name>text</name>name: text
Nested elements<a><b>1</b></a>a:\n b: "1"
Attributes<el attr="v"/>el:\n _attr: v
Text + attributes<el a="1">text</el>el:\n _a: "1"\n _text: text
Repeated elements<r><i>1</i><i>2</i></r>r:\n i:\n - "1"\n - "2"
Empty element<el/>el: ""
CDATA<![CDATA[raw]]>Treated as plain text
Comments<!-- note -->Discarded (no YAML equivalent)
Namespacesxmlns:ns="uri"Prefix preserved or stripped
Boolean-like text<flag>true</flag>flag: "true" (quoted to stay string)

XML vs YAML: diferencias en el modelo de datos

Convertir entre XML y YAML no es un simple cambio de sintaxis. Los formatos tienen diferencias estructurales fundamentales que afectan a cómo se representan los datos tras la conversión.

Sistema de tipos
XML almacena todos los valores como cadenas de texto. YAML tiene booleanos, enteros, flotantes y nulos nativos. Durante la conversión, un valor como "true" o "3306" puede reinterpretarse como booleano o entero YAML a menos que el conversor lo entrecomille. Verifica siempre los valores sensibles al tipo en la salida.
Atributos frente a claves
Los elementos XML pueden llevar atributos junto con elementos hijo y contenido de texto. YAML solo tiene mapeos clave-valor. Los atributos deben convertirse a claves normales, habitualmente con un prefijo como _ o @ para distinguirlos de los elementos hijo.
Orden y duplicados
XML preserva el orden del documento y permite elementos hermanos con el mismo nombre de etiqueta. Los mapeos YAML no tienen orden definido en la especificación (aunque la mayoría de los parsers preservan el orden de inserción), y las claves duplicadas están prohibidas en YAML 1.2. Los elementos XML repetidos deben convertirse en una secuencia YAML.

Ejemplos de código

A continuación se muestran ejemplos funcionales para convertir XML a YAML en JavaScript, Python, Go y la línea de comandos. Cada ejemplo gestiona elementos anidados, atributos y etiquetas hermanas repetidas.

JavaScript (Node.js)
import { parseStringPromise } from 'xml2js'
import YAML from 'yaml'

const xml = `
<config>
  <database host="localhost" port="5432">
    <name>mydb</name>
  </database>
  <features>
    <feature>auth</feature>
    <feature>logging</feature>
  </features>
</config>`

const obj = await parseStringPromise(xml, { explicitArray: false })
console.log(YAML.stringify(obj))
// → config:
// →   database:
// →     $:
// →       host: localhost
// →       port: "5432"
// →     name: mydb
// →   features:
// →     feature:
// →       - auth
// →       - logging
Python
import xmltodict
import yaml

xml = """
<server>
  <host>db.example.com</host>
  <port>5432</port>
  <replicas>
    <replica>node-1</replica>
    <replica>node-2</replica>
  </replicas>
</server>
"""

# Step 1: XML → Python dict
data = xmltodict.parse(xml)

# Step 2: Python dict → YAML
print(yaml.dump(data, default_flow_style=False))
# → server:
# →   host: db.example.com
# →   port: '5432'
# →   replicas:
# →     replica:
# →     - node-1
# →     - node-2

# With the standard library only (no xmltodict)
import xml.etree.ElementTree as ET

def elem_to_dict(elem):
    d = {}
    if elem.attrib:
        d.update({f"_{k}": v for k, v in elem.attrib.items()})
    for child in elem:
        val = elem_to_dict(child)
        if child.tag in d:
            if not isinstance(d[child.tag], list):
                d[child.tag] = [d[child.tag]]
            d[child.tag].append(val)
        else:
            d[child.tag] = val
    if elem.text and elem.text.strip():
        text = elem.text.strip()
        return text if not d else {**d, "_text": text}
    return d

root = ET.fromstring(xml)
print(yaml.dump({root.tag: elem_to_dict(root)}, default_flow_style=False))
CLI (xq + yq)
# xq is part of the yq package (pip install yq)
# It parses XML via xq and outputs JSON, then pipe to yq for YAML

echo '<config><host>localhost</host><port>8080</port></config>' | xq . | yq -y .
# → config:
# →   host: localhost
# →   port: "8080"

# Using xmlstarlet + yq (Go version: https://github.com/mikefarah/yq)
xmlstarlet sel -t -c '/' input.xml | yq -p=xml -o=yaml
# Reads XML from file and outputs YAML directly
Go
package main

import (
	"encoding/xml"
	"fmt"
	"strings"

	"gopkg.in/yaml.v3"
)

type Server struct {
	XMLName xml.Name `xml:"server"`
	Host    string   `xml:"host" yaml:"host"`
	Port    int      `xml:"port" yaml:"port"`
	Options []string `xml:"options>option" yaml:"options"`
}

func main() {
	data := `<server>
		<host>db.example.com</host>
		<port>5432</port>
		<options><option>ssl=true</option><option>timeout=30</option></options>
	</server>`

	var srv Server
	xml.NewDecoder(strings.NewReader(data)).Decode(&srv)

	out, _ := yaml.Marshal(srv)
	fmt.Println(string(out))
	// → host: db.example.com
	// → port: 5432
	// → options:
	// →   - ssl=true
	// →   - timeout=30
}

Preguntas frecuentes

¿Es la conversión de XML a YAML sin pérdidas?
No completamente. Los atributos XML, comentarios, instrucciones de procesamiento y secciones CDATA no tienen equivalente nativo en YAML. Los atributos pueden preservarse como claves con prefijo (_attr o @attr), pero los comentarios e instrucciones de procesamiento se descartan. Si necesitas volver a XML, verifica que los atributos y las declaraciones de espacio de nombres sobrevivieron a la conversión.
¿Cómo se representan los atributos XML en YAML?
La mayoría de los conversores añaden un prefijo de guion bajo (_) o símbolo @ a los nombres de atributos para separarlos de las claves de elementos hijo. Por ejemplo, <server port="8080"> se convierte en server:\n _port: "8080". El prefijo concreto depende de la biblioteca o herramienta que uses.
¿Qué ocurre con los elementos XML repetidos durante la conversión?
Cuando la misma etiqueta de elemento aparece varias veces bajo un mismo padre, el conversor los agrupa en una secuencia YAML (lista). Por ejemplo, dos elementos hermanos <item> se convierten en item:\n - value1\n - value2. Un único <item> permanece como valor escalar a menos que se active el modo de forzar matriz.
¿Puedo convertir YAML de vuelta a XML?
Sí, pero el resultado depende de cómo la conversión original gestionó los atributos y los tipos. Si los atributos se preservaron con claves prefijadas, un conversor de YAML a XML puede reconstruirlos. ToolDeck dispone de una herramienta de YAML a XML para la dirección inversa. Ten en cuenta que los tipos nativos de YAML (booleanos, números) se convertirán en cadenas de texto en XML.
¿Por qué la salida YAML entrecomilla algunos valores?
YAML tiene tipos nativos: true/false son booleanos, los números sin comillas se convierten en enteros o flotantes, e yes/no/on/off también son booleanos en YAML 1.1. Si tu XML contiene texto como "true" o "3306" que debe permanecer como cadena, el conversor lo entrecomilla para evitar que los parsers YAML reinterpreten el valor. Este es el comportamiento correcto, no un error.
¿Cómo gestiono archivos XML grandes?
Los conversores en el navegador funcionan bien con archivos de unos pocos megabytes. Para archivos más grandes (10 MB o más), utiliza un enfoque de streaming: analiza el XML con iterparse de Python o sax de Node.js, construye el objeto intermedio de forma incremental y serializa a YAML. Herramientas como yq también pueden convertir XML a YAML directamente desde la línea de comandos sin cargar el documento completo en memoria.
¿Cuál es la diferencia entre la conversión de XML a YAML y la de XML a JSON?
Ambas conversiones afrontan el mismo reto de mapear atributos XML y elementos repetidos a un modelo de datos diferente. La diferencia principal está en el formato de salida. JSON es estricto (sin comentarios, tipos explícitos, sintaxis rígida), mientras que YAML es un superconjunto de JSON que añade características más legibles: comentarios, cadenas multilínea, anclas y alias. Elige JSON cuando el consumidor sea una API o un runtime de JavaScript. Elige YAML cuando el consumidor sea una persona que edita archivos de configuración.