ToolDeck

XML para YAML

Converte XML para formato YAML

Experimente um exemplo

Entrada XML

Saída YAML

Roda localmente · Seguro para colar segredos
O YAML aparecerá aqui…

O que é Conversão de XML para YAML?

A conversão de XML para YAML transforma dados de Extensible Markup Language (XML) para YAML Ain't Markup Language (YAML). O XML usa tags com atributos para descrever dados hierárquicos, enquanto o YAML representa as mesmas estruturas por meio de indentação e pares chave-valor em texto puro. Converter XML para YAML online é uma tarefa comum ao migrar configurações de sistemas baseados em XML — como Java Spring, Maven ou .NET — para plataformas que preferem YAML, como Kubernetes, Ansible, GitHub Actions e Docker Compose.

Os dois formatos diferem em seus modelos de dados. O XML trata tudo como texto por padrão e depende de definições de schema (XSD, DTD) para impor tipos. O YAML tem tipos nativos: strings, inteiros, floats, booleanos, nulos, sequências (arrays) e mapeamentos (objetos). Durante a conversão, valores como "true", "5432" e "3.14" podem ser interpretados como tipos nativos YAML em vez de permanecerem strings. Um conversor cuidadoso coloca esses valores entre aspas para preservar a representação textual original da fonte XML.

O XML também suporta construções sem equivalente em YAML: atributos, namespaces, instruções de processamento, seções CDATA e comentários. A conversão precisa escolher uma convenção para representar atributos (comumente chaves com prefixo de underscore, como _attr) e decidir se descarta ou achata o restante. Entender esses trade-offs antes de converter ajuda a escolher a ferramenta certa, configurá-la corretamente e verificar que a saída YAML corresponde à intenção original do 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 que Usar um Conversor de XML para YAML Online?

Escrever um script de conversão manualmente significa lidar com mapeamento de atributos, detecção de arrays em elementos repetidos e casos extremos de coerção de tipos do YAML. Um conversor no navegador resolve tudo isso em uma única etapa, permitindo inspecionar a saída YAML e copiá-la diretamente para seus arquivos de configuração.

Conversão instantânea
Cole seu XML e obtenha a saída YAML em milissegundos. Sem instalação de biblioteca, sem etapa de build, sem script para manter.
🔒
Processamento com privacidade em primeiro lugar
A conversão é executada inteiramente no seu navegador via JavaScript. Seus dados XML ficam na sua máquina e nunca são enviados a nenhum servidor.
🔀
Lida com atributos e arrays
Os atributos XML são mapeados para chaves com prefixo. Elementos irmãos repetidos são agrupados automaticamente em sequências YAML, preservando estruturas de lista.
📋
Sem conta necessária
Abra a página, cole o XML, copie o resultado YAML. Sem cadastro, sem chave de API, sem limites de uso.

Casos de Uso da Conversão XML para YAML

Desenvolvimento frontend
Converta trechos de configuração XML de ferramentas de build legadas (Ant, Maven) para YAML em pipelines de CI modernos como GitHub Actions ou GitLab CI, que esperam arquivos de configuração em YAML.
Engenharia backend
Migre definições de beans Spring XML para o formato application.yml do Spring Boot, ou converta seções app.config do .NET em YAML para implantações em contêiner.
DevOps e infraestrutura
Transforme descritores de implantação baseados em XML (server.xml do Tomcat, web.config do IIS) em equivalentes YAML para manifests do Kubernetes, Helm charts ou playbooks do Ansible.
QA e testes
Converta fixtures de teste XML ou configurações JUnit em YAML para frameworks de teste que suportam fontes de dados YAML, como pytest com fixtures YAML ou Robot Framework.
Engenharia de dados
Transforme exportações XML de sistemas empresariais (SAP, Oracle) em YAML para ingestão por ferramentas de ETL como dbt ou Airflow, que usam configuração e schemas baseados em YAML.
Aprendizado e documentação
Estudantes e escritores técnicos podem colar amostras XML para ver como elementos, atributos e aninhamento se traduzem em indentação, sequências e mapeamentos YAML.

Referência de Mapeamento XML para YAML

XML e YAML têm modelos de dados diferentes. A tabela abaixo mostra como cada construção XML mapeia para um equivalente YAML. Atributos são tipicamente convertidos para chaves com prefixo de underscore, e elementos repetidos tornam-se sequências YAML. Algumas construções, como comentários e instruções de processamento, não possuem representação em YAML e são descartadas durante a conversão.

Construção XMLExemplo 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: Diferenças no Modelo de Dados

Converter entre XML e YAML não é uma simples troca de sintaxe. Os formatos têm diferenças estruturais fundamentais que afetam como os dados são representados após a conversão.

Sistema de tipos
O XML armazena todos os valores como strings de texto. O YAML tem booleanos, inteiros, floats e nulos nativos. Durante a conversão, um valor como "true" ou "3306" pode ser reinterpretado como booleano ou inteiro YAML, a menos que o conversor o coloque entre aspas. Sempre verifique valores sensíveis a tipo na saída.
Atributos vs chaves
Elementos XML podem ter atributos junto com elementos filhos e conteúdo textual. O YAML só tem mapeamentos de chave-valor. Os atributos precisam ser convertidos para chaves regulares, tipicamente com um prefixo como _ ou @ para diferenciá-los dos elementos filhos.
Ordem e duplicatas
O XML preserva a ordem do documento e permite elementos irmãos com o mesmo nome de tag. Os mapeamentos YAML são não-ordenados por especificação (embora a maioria dos parsers preserve a ordem de inserção), e chaves duplicadas são proibidas no YAML 1.2. Elementos XML repetidos precisam tornar-se uma sequência YAML.

Exemplos de Código

Abaixo estão exemplos funcionais para converter XML para YAML em JavaScript, Python, Go e na linha de comando. Cada exemplo lida com elementos aninhados, atributos e tags irmãs 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
}

Perguntas Frequentes

A conversão de XML para YAML é sem perdas?
Não completamente. Atributos, comentários, instruções de processamento e seções CDATA do XML não têm equivalente nativo em YAML. Os atributos podem ser preservados como chaves com prefixo (_attr ou @attr), mas comentários e instruções de processamento são descartados. Se precisar fazer o round-trip de volta ao XML, verifique se os atributos e declarações de namespace sobreviveram à conversão.
Como os atributos XML são representados em YAML?
A maioria dos conversores prefixa os nomes de atributo com underscore (_) ou símbolo @ para separá-los das chaves de elementos filhos. Por exemplo, <server port="8080"> torna-se server:\n _port: "8080". O prefixo específico depende da biblioteca ou ferramenta utilizada.
O que acontece com elementos XML repetidos durante a conversão?
Quando a mesma tag de elemento aparece várias vezes sob um mesmo pai, o conversor os agrupa em uma sequência YAML (lista). Por exemplo, dois irmãos <item> tornam-se item:\n - valor1\n - valor2. Um único <item> permanece como valor escalar, a menos que o modo force-array esteja ativado.
Posso converter YAML de volta para XML?
Sim, mas o resultado depende de como a conversão original tratou atributos e tipos. Se os atributos foram preservados com chaves prefixadas, um conversor YAML para XML pode reconstruí-los. O ToolDeck possui uma ferramenta YAML para XML para a direção inversa. Observe que tipos nativos YAML (booleanos, números) tornam-se strings de texto no XML.
Por que a saída YAML coloca alguns valores entre aspas?
O YAML tem tipos nativos: true/false são booleanos, números sem aspas tornam-se inteiros ou floats, e yes/no/on/off também são booleanos no YAML 1.1. Se seu XML contém texto como "true" ou "3306" que deve permanecer string, o conversor o coloca entre aspas para evitar que parsers YAML reinterpretem o valor. Esse é o comportamento correto, não um erro.
Como lidar com arquivos XML grandes?
Conversores no navegador funcionam bem para arquivos de até alguns megabytes. Para arquivos maiores (10 MB+), use uma abordagem de streaming: faça o parse do XML com iterparse do Python ou sax do Node.js, construa o objeto intermediário de forma incremental e serialize para YAML. Ferramentas como yq também podem converter XML para YAML diretamente na linha de comando sem carregar o documento completo na memória.
Qual é a diferença entre converter XML para YAML e XML para JSON?
Ambas as conversões enfrentam o mesmo desafio de mapear atributos e elementos repetidos do XML para um modelo de dados diferente. A principal diferença está no formato de saída. JSON é estrito (sem comentários, tipos explícitos, sintaxe rígida), enquanto YAML é um superconjunto do JSON que adiciona recursos mais legíveis por humanos: comentários, strings multilinhas, âncoras e aliases. Escolha JSON quando o consumidor for uma API ou runtime JavaScript. Escolha YAML quando o consumidor for um humano editando arquivos de configuração.