O XML costuma ser descrito como obsoleto, o que é estranho, já que você quase certamente abriu vários arquivos XML hoje sem perceber. Ele perdeu a discussão sobre enviar dados entre programas — o JSON venceu isso com folga. Manteve todo o resto.
XML significa Extensible Markup Language. Parece HTML, com uma diferença crucial: em HTML as tags são fixas e já definidas, enquanto em XML você inventa as suas.
<book>
<title>Jornada ao Oeste</title>
<year>1592</year>
</book>
Nada define <book> de antemão. O formato dá a gramática — tags, aninhamento, atributos — e você fornece o vocabulário que seus dados precisam.
.docx é um pacote zip cheio de XML; o texto, a formatação e a estrutura são arquivos XML lá dentro.Não é uma lista de legado. É onde o XML se mostrou certo.
Considere uma frase com ênfase dentro: a rápida raposa marrom, onde só «rápida» está em itálico. Em XML isso é natural:
<p>a <em>rápida</em> raposa marrom</p>
Texto e marcação se entrelaçam — o que o XML chama de conteúdo misto. O elemento contém um pouco de texto, depois um elemento, depois mais texto.
O JSON não tem como expressar isso. Seus valores são texto, número, lista ou objeto; não existe o conceito de «texto com coisas embutidas em pontos específicos». Representar essa frase em JSON exige inventar uma convenção — um array de fragmentos, cada um marcado com seu estilo — e aí todos precisam aceitar a sua invenção.
Documentos são feitos de conteúdo misto. Quase toda frase de um documento real tem algo marcado dentro. É por isso que processadores de texto, ebooks e diagramação são XML, e por isso continuarão sendo.
Dados não são assim. Um preço é um número, um nome é um texto, um pedido tem uma lista de itens. O JSON encaixa perfeito e o XML só acrescenta pontuação.
<book id="42"> — metadados presos ao elemento em vez de dentro dele.<!-- assim -->. O JSON não tem nenhum, o que incomoda de verdade em arquivos de configuração.<br> é inválido; <br/> é o certo.<Book> e <book> são elementos diferentes.E então a que causa mais XML quebrado que todas as outras juntas: o e comercial.
Cinco caracteres são reservados, e & é o perigoso porque aparece o tempo todo em URLs. Um endereço com parâmetros tem & entre eles, e colado cru dentro de XML invalida o arquivo na hora. Precisa ser escrito como &.
Essa é a causa habitual de um validador recusar um sitemap ou um feed RSS: um único e comercial sem escape num link. Os outros quatro são <, >, " e ', escritos <, >, " e '.
Para um bloco cheio desses caracteres, <![CDATA[ ... ]]> marca uma região que o analisador deve tomar literalmente — o jeito padrão de pôr HTML dentro de um feed RSS.
Diferente do CSV, o XML resolve bem o problema da codificação. A primeira linha declara:
<?xml version="1.0" encoding="UTF-8"?>
O arquivo diz o que é, nada precisa adivinhar, e conteúdo chinês ou japonês sobrevive à passagem entre sistemas. Uma coisa pequena que elimina uma categoria inteira de falha.
O XML é prolixo. Para uma API chamada mil vezes por segundo isso é puro desperdício, e o JSON é a resposta certa.
Para um documento que precisa ser legível daqui a trinta anos, validado contra um padrão publicado e interpretado identicamente por duas organizações que nunca se falaram, a verbosidade está trabalhando. O arquivo se descreve, o esquema define o que é legal, e nada depende de uma suposição comum que ninguém escreveu.
Essa é a divisão que vale lembrar: JSON para dados em movimento, XML para documentos que precisam durar.
& sem escape quebra o arquivo — escreva &, sobretudo em URLs