Se você já trabalhou com APIs corporativas legadas, consumiu feeds RSS, abriu um arquivo .docx, ou desenhou um SVG, você usou XML — mesmo que não soubesse. XML movimenta muito mais do mundo de software do que a maioria dos desenvolvedores percebe. É mais antigo que o JSON, mais verboso e mais complexo — mas também mais capaz em contextos específicos. Este é um guia prático sobre o que XML realmente é, como funciona, e quando ainda faz sentido usá-lo.

XML significa eXtensible Markup Language (Linguagem de Marcação Extensível). O W3C publicou a especificação XML 1.0 em 1998, e ela se tornou o formato dominante de troca de dados da era inicial da web. A parte "extensível" é a chave: ao contrário do HTML, que tem um conjunto fixo de tags, o XML permite que você defina suas próprias tags para descrever qualquer estrutura de dados que precisar.

Como XML se Parece

Aqui está um documento XML completo representando um produto de uma API de e-commerce. Isso cobre todos os recursos de sintaxe principais que você vai encontrar:

xml
<?xml version="1.0" encoding="UTF-8"?>
<product id="SKU-8821" inStock="true">
  <name>Wireless Noise-Cancelling Headphones</name>
  <brand>SoundCore</brand>
  <price currency="USD">149.99</price>
  <categories>
    <category>Electronics</category>
    <category>Audio</category>
    <category>Accessories</category>
  </categories>
  <specs>
    <spec name="battery">30 hours</spec>
    <spec name="connectivity">Bluetooth 5.2</spec>
    <spec name="weight">250g</spec>
  </specs>
  <description>
    Premium wireless headphones with active noise cancellation,
    30-hour battery life, and foldable design.
  </description>
</product>

Vamos analisar as partes principais. A primeira linha é a declaração XML — ela informa aos parsers que este é XML 1.0 codificado em UTF-8. A tag <product> é o elemento raiz (todo documento XML tem exatamente um). As partes id e inStock nessa mesma tag são atributos. Tudo dentro das tags de abertura e fechamento é elemento filho, atributos ou conteúdo de texto.

Elementos vs Atributos — Uma Decisão de Design Real

Uma coisa que pega novos autores XML de surpresa: você pode representar os mesmos dados como um elemento ou como um atributo. Ambos são XML válido para o mesmo dado:

xml
<!-- Como um atributo -->
<price currency="USD">149.99</price>

<!-- Como um elemento filho -->
<price>
  <amount>149.99</amount>
  <currency>USD</currency>
</price>

A sabedoria convencional: use atributos para metadados sobre o elemento (identificadores, flags, unidades), e use elementos filhos para o conteúdo de dados em si — especialmente se esse conteúdo puder se tornar complexo, repetido, ou precisar de seus próprios atributos no futuro. Atributos só podem conter texto simples; elementos filhos podem conter qualquer estrutura XML.

Bem-formado vs Válido — Dois Padrões Diferentes

O XML tem dois níveis de correção que são frequentemente confundidos:

  • XML bem-formado segue as regras básicas de sintaxe: um elemento raiz, todas as tags corretamente fechadas, atributos entre aspas, sem caracteres ilegais. Qualquer parser XML pode verificar isso.
  • XML válido está em conformidade com um esquema específico — seja um DTD (Definição de Tipo de Documento) ou um XML Schema (XSD). A verificação de validade requer tanto o documento quanto o esquema. Você pode ter XML bem-formado que não é válido contra um esquema específico.
Na prática: a maioria das integrações XML corporativas se preocupa com a validade, não apenas com ser bem-formado. Se você está construindo uma integração SOAP ou trocando registros de saúde HL7, o esquema define exatamente quais elementos são obrigatórios, quais tipos eles contêm e quais valores são permitidos. Use o Validador XML para verificar o formato rapidamente.

Onde XML Aparece no Mundo Real

  • Serviços web SOAP. A metade mais antiga do software corporativo ainda roda em SOAP — APIs bancárias, sistemas ERP, gateways de pagamento. Cada mensagem SOAP é um documento XML bem-definido com Envelope, Header e Body.
  • Feeds RSS e Atom. Todo feed de podcast, feed de site de notícias e assinatura de canal do YouTube é um documento XML. RSS 2.0 e Atom são formatos baseados em XML que existem desde o início dos anos 2000.
  • Imagens SVG. Scalable Vector Graphics é XML. Quando você abre um arquivo .svg em um editor de texto, está lendo XML. É por isso que você pode estilizar SVGs com CSS e manipulá-los com JavaScript.
  • Documentos Office. Um arquivo .docx, .xlsx ou .pptx é um arquivo ZIP contendo arquivos XML. Office Open XML é como a Microsoft armazena todos os formatos de documento Office modernos.
  • Layouts Android. Layouts de UI do Android são definidos em arquivos XML. Se você já fez desenvolvimento Android, escreveu muito XML.
  • Maven e pom.xml. O sistema de build Maven do Java usa um arquivo pom.xml para definir dependências do projeto e configuração de build — familiar para qualquer desenvolvedor Java.

Analisando XML em JavaScript — DOMParser

No navegador, você pode analisar strings XML usando a API DOMParser integrada. Funciona da mesma forma que analisar HTML:

js
const xmlString = `<?xml version="1.0"?>
<product id="SKU-8821">
  <name>Wireless Headphones</name>
  <price currency="USD">149.99</price>
  <categories>
    <category>Electronics</category>
    <category>Audio</category>
  </categories>
</product>`;

const parser = new DOMParser();
const doc = parser.parseFromString(xmlString, 'application/xml');

// Verificar erros de análise
const parseError = doc.querySelector('parsererror');
if (parseError) {
  console.error('XML parse error:', parseError.textContent);
} else {
  const name = doc.querySelector('name').textContent;
  const currency = doc.querySelector('price').getAttribute('currency');
  const categories = [...doc.querySelectorAll('category')].map(el => el.textContent);

  console.log(name);       // Wireless Headphones
  console.log(currency);   // USD
  console.log(categories); // ['Electronics', 'Audio']
}

Analisando XML em Python — ElementTree

A biblioteca padrão do Python inclui xml.etree.ElementTree — sem necessidade de pacotes de terceiros para análise XML básica:

python
import xml.etree.ElementTree as ET

xml_string = """<?xml version="1.0"?>
<product id="SKU-8821">
  <name>Wireless Headphones</name>
  <price currency="USD">149.99</price>
  <categories>
    <category>Electronics</category>
    <category>Audio</category>
  </categories>
</product>"""

root = ET.fromstring(xml_string)

name = root.find('name').text
currency = root.find('price').get('currency')
categories = [el.text for el in root.findall('categories/category')]

print(name)        # Wireless Headphones
print(currency)    # USD
print(categories)  # ['Electronics', 'Audio']

As Armadilhas que Pegam Autores XML de Surpresa

  • Codificação de entidades. Cinco caracteres devem ser escapados no texto e nos valores de atributos XML: &&amp;, <&lt;, >&gt;, "&quot;, '&apos;. Esquecer de escapar um e comercial em uma URL quebra o documento inteiro.
  • Namespaces. O XML com namespaces parece <soap:Envelope xmlns:soap="...">. Consultas sem conhecimento de namespace não encontrarão os elementos. Este é um dos bugs de análise XML mais comuns.
  • Sensibilidade a espaços em branco. Espaços em branco entre elementos são tecnicamente significativos em XML (ao contrário do HTML). A maioria dos parsers lida com isso de forma sensata, mas pode causar surpresas ao comparar documentos.
  • Codificação de caracteres. A declaração XML deve corresponder à codificação real do arquivo. Um arquivo UTF-8 declarado como ISO-8859-1 será analisado incorretamente para qualquer caractere não-ASCII.
  • Sem tipo de array nativo. XML não tem arrays. Você representa listas repetindo elementos, o que significa que os parsers retornam NodeLists em vez de arrays JavaScript — sempre converta com Array.from() ou spread.

Ferramentas XML que Vale a Pena Conhecer

Trabalhando com XML regularmente? Essas ferramentas vão economizar seu tempo: Formatador XML para formatar respostas XML minificadas, Validador XML para verificar o formato, XML para JSON para converter respostas XML em JSON para facilitar o manuseio, e XML XPath para testar consultas XPath em um documento.

Conclusão

XML é verboso e complexo comparado ao JSON, mas não é uma nota de rodapé legada — é a base do SVG, documentos Office, feeds RSS, serviços SOAP e UIs Android. Compreender a distinção elemento/atributo, a diferença entre XML bem-formado e válido, e as armadilhas comuns em torno de codificação de entidades e namespaces será útil sempre que XML aparecer em seu trabalho. E ele vai aparecer.