XML para YAML
Este conversor transforma um documento XML em YAML legível no seu navegador. Atributos viram chaves prefixadas com @, o texto de um elemento virá #text quando compartilha o elemento com atributos ou filhos, e elementos irmãos repetidos viram sequências YAML. Os valores permanecem como strings, para que um código postal chegue intacto, e nada é enviado.
XML para YAML: explicação
XML carrega valores em três lugares — atributos, conteúdo de texto e elementos filhos — e YAML tem espaço para os três em um mapeamento, desde que cada um receba um nome que não possa colidir com os outros. Essa é toda a convenção que este conversor aplica: id="bk101" vira a chave "@id", o texto dentro de um elemento vira "#text" quando precisa de um lugar próprio, e elementos filhos viram chaves cujos valores são mapeamentos ou listas. Os prefixos parecem ruído até que um elemento tenha um atributo, um filho e texto de uma vez — aí eles são a única razão pela qual a viagem de ida e volta pode ser sem perdas.
O estilo YAML é o estilo padrão do site: indentação de dois espaços, travessias de sequência alinhadas com a chave pai em vez de recuada, e aspas apenas onde a forma simples seria mal interpretada. Essa última regra faz um trabalho real aqui. O texto XML não é tipado, então 44.95 é uma string, e o emissor escreve como "44.95" precisamente para que um parser YAML não re-infera um número a partir dele. O resultado é um documento que faz a viagem de ida e volta: XML para YAML e de volta chega com os mesmos valores, os mesmos atributos e a mesma estrutura com que começou.
Tudo é executado nesta aba do navegador. O XML é parseado por um motor na página e o YAML é emitido a partir da árvore parseada; nenhum toca uma rede — abra DevTools, veja o painel de Rede permanecer silencioso, e a promessa se comprova.
Para mandar o resultado de volta no sentido inverso, o Conversor de YAML para XML honra as mesmas convenções de @ e #text, então nada precisa ser renomeado manualmente.
Novo(a) na leitura da saída YAML? O Guia de noções básicas de YAML explica indentação, aspas e as regras de scalar que o emissor segue.
Como a conversão realmente funciona
O documento é tokenizado uma vez em uma árvore de elementos, atributos e texto, e o emissor YAML só vê essa árvore — então peculiaridades de formatação na fonte (indentação irregular, atributos divididos em várias linhas) não podem vazar para a saída. A árvore cabe em um documento com uma única raiz ou não cabe, e o conversor diz qual é o caso.
- Parse: um tokenizer de única passagem lê elementos, atributos, texto, comentários e CDATA; tags desalinhadas ou não fechadas são rejeitadas com um número de linha.
- Converte: cada elemento se torna um mapeamento — atributos como entradas "@chave", texto como "#text", elementos filhos como chaves aninhadas.
- Coleta: elementos irmãos repetidos são agrupados em uma única lista, então <book> aparecendo dez vezes se torna uma sequência de dez itens.
- Emite: a árvore é serializada como YAML com indentação de dois espaços, com aspas apenas onde um valor seria mal interpretado.
Como recursos do XML chegam no YAML
Cada recurso do documento de origem tem um lugar reservado na saída, e os lugares são escolhidos para que dois recursos nunca briguem por uma mesma chave. A tabela mostra o mapeamento sobre as formas que realmente aparecem em documentos reais — um elemento com atributo, um elemento com filhos, um elemento que se repete.
| Construto XML | YAML produzido |
|---|---|
| <book id="bk101"> | um mapeamento de livro com "@id": bk101 |
| <price>44.95</price> | price com "#text": "44.95" |
| dez elementos irmãos <book> | uma chave book cujo valor é uma lista de dez itens |
| <debug/> (vazio) | debug: {} — presente, explicitamente vazio |
Por que #text existe e quando aparece
Um cujo conteúdo é apenas texto — <price>44.95</price> — poderia se tornar o mapeamento simples price: 44.95, e para elementos sem atributos e sem filhos, é efetivamente isso que você lê. Mas o momento em que um elemento também carrega um atributo ou um filho, seu texto precisa de uma chave que nenhum nome de atributo e nenhum nome de elemento filho possa ocupar. #text é essa chave. Ela aparece apenas quando o texto precisa compartilhar seu elemento com outra coisa, o que mantém a saída comum limpa enquanto torna a saída complicada sem ambiguidade.
- Elementos de apenas texto mantêm seu conteúdo legível em uma linha.
- Elementos mistos — atributos mais texto, ou filhos mais texto — movem o texto para "#text".
- Entidades no texto de origem são mantidas idênticas; o parser não é um parser validador e não as reescreve.
Valores, tipos e a garantia de viagem de ida e volta
O texto XML é strings, e o emissor trata assim: nada é forçado a um número ou booleano no caminho. A consequência visível é o uso de aspas — 44.95 é escrito como "44.95" porque um 44.95 sem aspas seria relido como um número em YAML, e um código postal como 02134 perderia o zero à esquerda da mesma forma. Valores que não podem ser mal interpretados, como bk101, são emitidos sem aspas. Converta o resultado de volta com o conversor de YAML para XML do site e o documento que você obtém é o documento com que começou, byte por byte onde importa: nomes, atributos, texto e estrutura.
- Nenhuma inferência de tipo: texto cruza como texto, então precisão e zeros à esquerda são preservados.
- Strings parecidas com números são colocadas entre aspas na saída, o que é que torna a viagem de ida e volta sem perdas.
- Espaço em branco dentro de um nó de texto é preservado; espaço em branco entre elementos nunca se torna dado.
Perguntas frequentes
Converter XML para YAML envia meu documento para algum lugar?
Não. O parsing e a geração YAML são executados dentro desta aba do navegador com código que foi carregado uma vez ao abrir a página. Não há um endpoint de upload, e a página é servida com um Content-Security-Policy cujo connect-src é 'self', então o navegador recusaria qualquer solicitação de saída, independentemente do código. Veja o painel de Rede em DevTools enquanto converte — ele permanece silencioso, e essa é a versificável desta promessa.
O que significam os prefixos @ e #text na saída?
Eles registram de onde cada valor veio no XML. Uma chave como "@id" guarda um atributo — id="bk101" na fonte — e "#text" guarda o próprio texto de um elemento quando esse elemento também tem atributos ou filhos. Os prefixos garantem que não haja colisão: um atributo chamado price e um elemento filho chamado price não podem mapear para a mesma chave, e o leitor YAML sempre pode dizer de que tipo de valor está olhando.
Como elementos repetidos são tratados?
Elementos irmãos que compartilham um nome são coletados em uma única sequência YAML: dez elementos <book> filhos se tornam uma única chave book cujo valor é uma lista de dez itens, na ordem do documento. Elementos que aparecem uma vez permanecem como mapeamentos simples. Essa é a convenção padrão de XML para dados, e é o que torna a saída natural para iterar em código — cada item da lista é um registro, com atributos e filhos dobrados dentro dele.
Por que 44.95 é escrito com aspas na saída YAML?
Porque o texto XML não é tipado, o valor é a string 44.95 — e um 44.95 sem aspas em YAML seria relido como um número por todo parser downstream. Colocar strings parecidas com números entre aspas é a forma do emissor de preservar o que a fonte disse de fato, e é a mesma regra que mantém um código postal como 02134 de perder seu zero à esquerda. Valores que não podem ser mal interpretados, como bk101, são emitidos sem aspas.
Quais partes do documento XML são ignoradas?
Comentários, a declaração DOCTYPE e instruções de processamento são puladas, já que nenhum carrega dados de elemento. Tudo estrutural é mantido: elementos, atributos, texto e seções CDATA. O conversor exige um único elemento raiz — um colar com dois elementos de nível superior é rejeitado com o nome e número de linha do segundo elemento, porque duas raízes são dois documentos e fundi-los em silêncio fabricaria uma estrutura que nunca existiu.
O que acontece com elementos vazios como <debug/>?
Um elemento vazio se torna um mapeamento explicitamente vazio — debug: {} — em vez de desaparecer, então a chave sobrevive e um consumidor ainda pode dizer que o campo estava no documento. Um elemento escrito com tags de abertura e fechamento separadas mas sem conteúdo, <note></note>, vai para o mesmo lugar: a estrutura diz que o elemento existiu, e apenas o conteúdo estava vazio. Nada é inventado para preenchê-lo.
Quais ferramentas relacionadas devo usar a seguir?
- YAML para XMLConversor que roda no seu navegadorAbrir
- Noções básicas de YAMLGuia em linguagem simplesAbrir
- JSON vs XMLComparação lado a ladoAbrir
- Converter XML em JSONConverte sem perder atributos nem listas de um itemAbrir
- Converter JSON em YAMLConverte com aspas que resistem à conversão de voltaAbrir
- Formatar JSONIndenta, ordena chaves e remove comentáriosAbrir