YAML para XML
Converte YAML para formato XML
Entrada YAML
Saída XML
O que é Conversão de YAML para XML?
A conversão de YAML para XML transforma dados escritos em YAML (YAML Ain't Markup Language) para XML (Extensible Markup Language). O YAML usa indentação e pontuação mínima para representar dados estruturados, enquanto o XML usa tags de abertura e fechamento com hierarquia explícita. Converter entre os dois é uma tarefa rotineira quando sistemas que consomem XML precisam receber dados originalmente escritos em YAML.
O YAML foi projetado para legibilidade humana. Arquivos de configuração de ferramentas como Kubernetes, Ansible, Docker Compose e GitHub Actions são escritos em YAML por ser compacto e fácil de editar manualmente. O XML, definido pela especificação W3C XML 1.0, tem sido o formato padrão de intercâmbio de dados em sistemas corporativos, serviços web SOAP e fluxos de trabalho orientados a documentos por décadas. Quando uma configuração escrita em YAML precisa alimentar um pipeline baseado em XML, a conversão é necessária.
O mapeamento entre YAML e XML não é um-para-um. O YAML suporta tipos de dados como booleanos, inteiros, floats e nulos de forma nativa, enquanto o XML trata todo o conteúdo como texto, a menos que um schema (XSD ou DTD) defina tipos externamente. Sequências YAML (listas) não têm equivalente direto em XML e devem ser representadas como elementos repetidos. Conhecer essas diferenças ajuda a prever a saída e evitar surpresas.
Por que Usar Este Conversor de YAML para XML?
Reescrever YAML como XML manualmente é tedioso e propenso a erros, especialmente para estruturas profundamente aninhadas. Este conversor realiza a tradução estrutural instantaneamente.
Casos de Uso da Conversão YAML para XML
Referência de Mapeamento de Tipos YAML para XML
Os tipos de dados YAML não se mapeiam diretamente para XML. Esta tabela mostra como cada construção YAML se traduz para o equivalente XML. Entender essas regras ajuda a prever a saída e solucionar resultados inesperados.
| Tipo YAML | Exemplo YAML | Saída 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: Diferenças entre Formatos
YAML e XML resolvem o mesmo problema — representação de dados estruturados — com diferentes trade-offs. Nenhum é universalmente melhor; a escolha certa depende de quem ou o que consome os dados.
| Funcionalidade | YAML | XML |
|---|---|---|
| Sintaxe | Baseada em indentação | Baseada em tags (<tag>...</tag>) |
| Tipos de dados | Nativos (string, int, bool, null, float) | Somente texto (schema adiciona tipos) |
| Comentários | # comentários inline | <!-- comentários em bloco --> |
| Atributos | Sem suporte nativo | Sim (<tag attr="val">) |
| Namespaces | Não suportado | Sim (xmlns:prefix) |
| Tamanho do arquivo | Menor (sem tags de fechamento) | Maior (tags verbosas) |
Exemplos de Código
Como converter YAML para XML de forma programática em diferentes linguagens e ambientes:
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>