YAML a XML
Convierte YAML a formato XML
Entrada YAML
Salida XML
¿Qué es la conversión de YAML a XML?
La conversión de YAML a XML transforma datos escritos en YAML (YAML Ain't Markup Language) al formato XML (Extensible Markup Language). YAML usa indentación y puntuación mínima para representar datos estructurados, mientras que XML utiliza etiquetas de apertura y cierre con una jerarquía explícita. Convertir entre ambos formatos es una tarea habitual cuando sistemas que consumen XML necesitan recibir datos originalmente escritos en YAML.
YAML fue diseñado para la legibilidad humana. Los archivos de configuración de herramientas como Kubernetes, Ansible, Docker Compose y GitHub Actions se escriben en YAML porque es compacto y fácil de editar a mano. XML, definido por la especificación W3C XML 1.0, ha sido el formato de intercambio de datos predeterminado en sistemas empresariales, servicios web SOAP y flujos de trabajo centrados en documentos durante décadas. Cuando una configuración escrita en YAML debe alimentar un pipeline basado en XML, la conversión es necesaria.
La correspondencia entre YAML y XML no es uno a uno. YAML admite tipos de datos como booleanos, enteros, flotantes y nulos de forma nativa, mientras que XML trata todo el contenido como texto a menos que un esquema (XSD o DTD) defina los tipos externamente. Las secuencias (listas) de YAML no tienen un equivalente directo en XML y deben representarse como elementos repetidos. Conocer estas diferencias te ayuda a predecir la salida y evitar sorpresas.
¿Por qué usar este conversor de YAML a XML?
Reescribir manualmente YAML como XML es tedioso y propenso a errores, especialmente en estructuras profundamente anidadas. Este conversor gestiona la traducción estructural al instante.
Casos de uso de YAML a XML
Referencia de correspondencia de tipos YAML a XML
Los tipos de datos YAML no se corresponden directamente con XML. Esta tabla muestra cómo se traduce cada construcción YAML a su equivalente XML. Conocer estas reglas te ayuda a predecir la salida y solucionar resultados inesperados.
| Tipo YAML | Ejemplo YAML | Salida XML |
|---|---|---|
| Mapping (key: value) | { name: Alice } | <name>Alice</name> |
| Sequence (- item) | - apple\n- banana | <item>apple</item><item>banana</item> |
| Nested mapping | user:\n name: Alice | <user><name>Alice</name></user> |
| Scalar (string) | greeting: hello world | <greeting>hello world</greeting> |
| Scalar (number) | count: 42 | <count>42</count> |
| Scalar (boolean) | active: true | <active>true</active> |
| Null | value: null | <value/> |
| Multiline string | bio: |\n Line one\n Line two | <bio>Line one\nLine two</bio> |
YAML vs XML: diferencias entre formatos
YAML y XML resuelven el mismo problema — la representación de datos estructurados — con diferentes compromisos. Ninguno es universalmente mejor; la elección correcta depende de quién o qué consume los datos.
| Característica | YAML | XML |
|---|---|---|
| Sintaxis | Basada en indentación | Basada en etiquetas (<etiqueta>...</etiqueta>) |
| Tipos de datos | Nativos (string, int, bool, null, float) | Solo texto (el esquema añade tipos) |
| Comentarios | # comentarios en línea | <!-- comentarios en bloque --> |
| Atributos | Sin soporte nativo | Sí (<etiqueta attr="val">) |
| Espacios de nombres | No admitido | Sí (xmlns:prefijo) |
| Tamaño del archivo | Menor (sin etiquetas de cierre) | Mayor (etiquetas verbosas) |
Ejemplos de código
Cómo convertir YAML a XML de forma programática en distintos lenguajes y entornos:
import { parseDocument } from 'yaml'
import { js2xml } from 'xml-js'
const yamlStr = `
server:
host: localhost
port: 8080
ssl: true
`
const data = parseDocument(yamlStr).toJSON()
const xml = js2xml({ root: data }, { compact: true, spaces: 2 })
console.log(xml)
// → <root>
// → <server>
// → <host>localhost</host>
// → <port>8080</port>
// → <ssl>true</ssl>
// → </server>
// → </root>import yaml
import xml.etree.ElementTree as ET
yaml_str = """
database:
host: db.example.com
port: 5432
credentials:
user: admin
password: secret
"""
data = yaml.safe_load(yaml_str)
def dict_to_xml(tag, d):
elem = ET.Element(tag)
for key, val in d.items():
child = ET.SubElement(elem, key)
if isinstance(val, dict):
child.extend(dict_to_xml(key, val))
elem.remove(child)
elem.append(dict_to_xml(key, val))
else:
child.text = str(val)
return elem
root = dict_to_xml('root', data)
ET.indent(root, space=' ')
print(ET.tostring(root, encoding='unicode'))
# → <root>
# → <database>
# → <host>db.example.com</host>
# → <port>5432</port>
# → ...
# → </database>
# → </root>package main
import (
"encoding/xml"
"fmt"
"gopkg.in/yaml.v3"
)
type Server struct {
XMLName xml.Name `xml:"server"`
Host string `yaml:"host" xml:"host"`
Port int `yaml:"port" xml:"port"`
SSL bool `yaml:"ssl" xml:"ssl"`
}
func main() {
yamlData := []byte("host: localhost\nport: 8080\nssl: true")
var s Server
yaml.Unmarshal(yamlData, &s)
xmlBytes, _ := xml.MarshalIndent(s, "", " ")
fmt.Println(xml.Header + string(xmlBytes))
// → <?xml version="1.0" encoding="UTF-8"?>
// → <server>
// → <host>localhost</host>
// → <port>8080</port>
// → <ssl>true</ssl>
// → </server>
}# Using yq (YAML processor) with xq (XML wrapper around jq) # Install: pip install yq # Convert YAML file to XML yq -x . config.yaml # → <host>localhost</host><port>8080</port> # Pipe inline YAML through conversion echo "name: Alice" | yq -x . # → <name>Alice</name>