Si has trabajado con APIs de empresa heredadas, consumido feeds RSS, abierto un archivo .docx, o dibujado un SVG, has usado XML — incluso si no lo sabías. XML impulsa más del mundo del software de lo que la mayoría de los desarrolladores se dan cuenta. Es más antiguo que JSON, más verboso y más complejo — pero también más capaz en contextos específicos. Esta es una guía práctica de qué es realmente XML, cómo funciona, y cuándo todavía tiene sentido usarlo.

XML significa eXtensible Markup Language (lenguaje de marcado extensible). El W3C publicó la especificación XML 1.0 en 1998, y se convirtió en el formato de intercambio de datos dominante de la era temprana de la web. La parte "extensible" es clave: a diferencia de HTML que tiene un conjunto fijo de etiquetas, XML te permite definir tus propias etiquetas para describir cualquier estructura de datos que necesites.

Cómo se ve XML

Aquí hay un documento XML completo que representa un producto de una API de e-commerce. Esto cubre todas las características sintácticas esenciales que encontrarás:

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>

Analicemos las partes clave. La primera línea es la declaración XML — le dice a los parsers que esto es XML 1.0 codificado en UTF-8. La etiqueta <product> es el elemento raíz (cada documento XML tiene exactamente uno). Las partes id e inStock en esa misma etiqueta son atributos. Todo lo que está dentro de las etiquetas de apertura y cierre es elementos hijo, atributos, o contenido de texto.

Elementos vs atributos — Una decisión de diseño genuina

Algo que confunde a los nuevos autores de XML: puedes representar los mismos datos como elemento o como atributo. Ambos son XML válido para el mismo dato:

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

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

La sabiduría convencional: usa atributos para metadatos sobre el elemento (identificadores, indicadores, unidades), y usa elementos hijo para el contenido de datos real — especialmente si ese contenido podría volverse complejo, repetido, o necesitar sus propios atributos en el futuro. Los atributos solo pueden contener texto plano; los elementos hijo pueden contener cualquier estructura XML.

Bien formado vs válido — Dos estándares diferentes

XML tiene dos niveles de corrección que a menudo se confunden:

  • El XML bien formado sigue las reglas sintácticas básicas: un elemento raíz, todas las etiquetas correctamente cerradas, atributos entre comillas, sin caracteres ilegales. Cualquier parser XML puede verificar esto.
  • El XML válido se ajusta a un esquema específico — ya sea una DTD (Document Type Definition) o un Esquema XML (XSD). La verificación de validez requiere tanto el documento como el esquema. Puedes tener XML bien formado que no sea válido contra un esquema particular.
En la práctica: la mayoría de las integraciones XML empresariales se preocupan por la validez, no solo por estar bien formado. Si estás construyendo una integración SOAP o intercambiando registros médicos HL7, el esquema define exactamente qué elementos son requeridos, qué tipos contienen, y qué valores están permitidos. Usa el Validador XML para verificar la buena formación rápidamente.

Lugares del mundo real donde aparece XML

  • Servicios web SOAP. La mitad más antigua del software empresarial todavía funciona con SOAP — APIs bancarias, sistemas ERP, pasarelas de pago. Cada mensaje SOAP es un documento XML bien definido con un Envelope, Header y Body.
  • Feeds RSS y Atom. Cada feed de podcast, feed de sitio de noticias y suscripción a un canal de YouTube es un documento XML. RSS 2.0 y Atom son formatos basados en XML que han existido desde principios de los años 2000.
  • Imágenes SVG. Scalable Vector Graphics es XML. Cuando abres un archivo .svg en un editor de texto, estás leyendo XML. Por eso puedes estilizar SVGs con CSS y manipularlos con JavaScript.
  • Documentos Office. Un archivo .docx, .xlsx o .pptx es un archivo ZIP que contiene archivos XML. Office Open XML es cómo Microsoft almacena todos los formatos de documentos Office modernos.
  • Layouts Android. Los layouts de interfaz de usuario Android se definen en archivos XML. Si has hecho desarrollo Android, has escrito mucho XML.
  • Maven y pom.xml. El sistema de build Maven de Java usa un archivo pom.xml para definir dependencias de proyecto y configuración de build — familiar para cualquier desarrollador Java.

Analizar XML en JavaScript — DOMParser

En el navegador, puedes analizar cadenas XML usando la API integrada DOMParser. Funciona de la misma manera que analizar 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 errores de análisis
const parseError = doc.querySelector('parsererror');
if (parseError) {
  console.error('Error de análisis XML:', 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']
}

Analizar XML en Python — ElementTree

La biblioteca estándar de Python incluye xml.etree.ElementTree — sin paquetes de terceros necesarios para el análisis básico de XML:

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']

Los errores que tropiezan a los autores XML

  • Codificación de entidades. Cinco caracteres deben escaparse en el texto XML y los valores de atributos: &&amp;, <&lt;, >&gt;, "&quot;, '&apos;. Olvidar escapar un ampersand en una URL rompe todo el documento.
  • Espacios de nombres. El XML con espacios de nombres se parece a <soap:Envelope xmlns:soap="...">. Las consultas sin conciencia de espacios de nombres fallarán al encontrar elementos. Este es uno de los bugs de análisis XML más comunes.
  • Sensibilidad a los espacios en blanco. Los espacios en blanco entre elementos son técnicamente significativos en XML (a diferencia de HTML). La mayoría de los parsers los manejan razonablemente, pero puede causar sorpresas al comparar documentos.
  • Codificación de caracteres. La declaración XML debe coincidir con la codificación real del archivo. Un archivo UTF-8 declarado como ISO-8859-1 se analizará incorrectamente para cualquier carácter no-ASCII.
  • Sin tipo de array nativo. XML no tiene arrays. Representas listas repitiendo elementos, lo que significa que los parsers devuelven NodeLists en lugar de arrays JavaScript — siempre convierte con Array.from() o spread.

Herramientas XML que vale la pena conocer

¿Trabajas regularmente con XML? Estas herramientas te ahorrarán tiempo: Formateador XML para dar formato a respuestas XML minificadas, Validador XML para verificar la buena formación, XML a JSON para convertir respuestas XML a JSON para un manejo más fácil, y XPath XML para probar consultas XPath contra un documento.

Resumen

XML es verboso y complejo comparado con JSON, pero no es una nota al pie heredada — es la base de SVG, documentos Office, feeds RSS, servicios SOAP e interfaces Android. Comprender la distinción elemento/atributo, la diferencia entre XML bien formado y XML válido, y los errores comunes alrededor de la codificación de entidades y los espacios de nombres te servirá bien cada vez que XML aparezca en tu trabajo. Y aparecerá.