Seré honesto — cuando veo "XML" en 2026, mi primer instinto es pensar "código legacy". Pero eso es injusto. XML está silenciosamente impulsando algunos de los sistemas más críticos del planeta, y no va a desaparecer pronto. Déjame mostrarte por qué.
Donde XML aún manda
Banca y finanzas: Cada vez que haces una transferencia bancaria en Europa, hay una buena probabilidad de que pase por mensajes ISO 20022 — que son XML. Los reportes financieros usan XBRL (también XML). Estamos hablando de billones de dólares fluyendo por tuberías XML cada día.
Salud: HL7 FHIR usa tanto JSON como XML, pero los mensajes HL7 v2/v3 más antiguos en los que funcionan la mayoría de los sistemas hospitalarios? XML puro. Historiales de pacientes, resultados de laboratorio, recetas — todo XML.
Tus documentos de Office: Cada archivo .docx, .xlsx y .pptx es en realidad un archivo ZIP lleno de archivos XML. Abre uno alguna vez — es fascinante (y un poco aterrador).
Desarrollo Android: Cada archivo de layout en Android es XML. activity_main.xml es probablemente el primer archivo que crea cada desarrollador Android.
Herramientas de build: El pom.xml de Maven, los archivos .csproj de .NET, las configuraciones de Spring Framework — XML está profundamente integrado en las cadenas de herramientas empresariales.
Lo que XML puede hacer y JSON no
Namespaces: Imagina combinar elementos de diferentes vocabularios en un documento sin colisiones de nombres. Los namespaces XML lo hacen posible. Es esencial para formatos como SVG incrustado en HTML, o mezclar headers SOAP con payloads personalizados.
Contenido mixto: Intenta representar un párrafo donde algunas palabras son negrita y otras son cursiva en JSON. Es incómodo en el mejor de los casos. XML maneja esto naturalmente porque fue diseñado para documentos, no solo para datos.
Transformaciones XSLT: Puedes escribir una sola hoja de estilos XSLT que transforme XML en HTML, PDF, otro formato XML o texto plano. Es un lenguaje de transformación declarativo sin equivalente real en el mundo JSON.
Validación de schema: XML Schema (XSD) es más expresivo que JSON Schema en muchas áreas. Puede imponer orden de elementos, jerarquías de tipos complejas y restricciones entre campos con las que JSON Schema tiene dificultades.
Un ejemplo del mundo real
Digamos que estás construyendo un sistema de e-commerce que necesita generar facturas. Con XML + XSLT, almacenas los datos de factura en XML, luego aplicas diferentes hojas de estilos XSLT para generar: una versión HTML para el navegador, una versión PDF para imprimir y una versión EDI para el sistema del proveedor — todo desde los mismos datos fuente. Intenta hacer eso con JSON.
Namespaces XML en acción
Los namespaces son una de esas características de XML que parecen confusas hasta que realmente las necesitas. Aquí hay un ejemplo práctico — un icono SVG incrustado dentro de un documento XHTML:
Sin namespaces, el parser no sabría si pertenece al vocabulario HTML o al vocabulario SVG. Los namespaces te permiten mezclar vocabularios libremente en un solo documento, y eso es algo para lo que JSON simplemente no tiene mecanismo.
Errores comunes que los desarrolladores cometen con XML
Después de años trabajando con XML en sistemas de producción, aquí están los errores que veo más a menudo:
1. Ignorar las declaraciones de encoding. Si tu archivo XML contiene caracteres no ASCII pero olvidas la declaración de encoding, los parsers asumirán UTF-8 o lo que sea su valor por defecto. Siempre decláralo explícitamente:
2. Usar atributos cuando los elementos tienen más sentido. Los atributos no pueden contener estructuras complejas, no se pueden repetir y no evolucionan fácilmente. Si un valor podría crecer en complejidad más adelante, usa un elemento hijo en su lugar.
3. No validar contra un schema. Pasar XML sin validar es la receta para fallos silenciosos. Si tienes un XSD, úsalo. Detecta problemas de datos en tiempo de parseo en lugar de dejar que datos incorrectos se propaguen por tu sistema.
4. Construir XML por concatenación de strings. Nunca hagas esto — es una vulnerabilidad de inyección esperando a suceder. Siempre usa una biblioteca XML adecuada o un constructor DOM.
Consejos de rendimiento para procesamiento XML
Los parsers XML vienen en dos sabores principales, y elegir el correcto importa mucho para el rendimiento:
- Parsers DOM cargan el documento completo en memoria como un árbol. Genial para documentos pequeños a medianos donde necesitas acceso aleatorio. Malo para archivos grandes — un archivo XML de 100MB puede consumir 1GB+ de RAM como árbol DOM.
- Parsers SAX/StAX procesan el documento como un stream, un elemento a la vez. Usan casi nada de memoria y son mucho más rápidos para archivos grandes. La desventaja es que no puedes saltar de un lugar a otro en el documento.
Aquí está la regla general: si tu XML es menor de 10MB, DOM está bien. Más de 10MB, considera seriamente el streaming. Más de 100MB, el streaming es obligatorio a menos que disfrutes ver a tu servidor quedarse sin memoria.
XML vs JSON: Una referencia rápida
| Característica | XML | JSON |
| Comentarios | Sí () | No |
| Namespaces | Sí | No |
| Validación de schema | XSD, RelaxNG, Schematron | JSON Schema |
| Contenido mixto | Soporte nativo | Soluciones incómodas |
| Tipos de datos | Vía XSD | String, number, boolean, null, array, object |
| Transformación | XSLT | Código personalizado |
| Tamaño de archivo | Mayor (tags verbosos) | Menor |
| Velocidad de parseo | Más lento | Más rápido |
| Legibilidad humana | Buena (cuando está formateado) | Buena |
Una breve historia de XML
XML fue publicado como recomendación del W3C en febrero de 1998. Fue diseñado como un subconjunto simplificado de SGML (Standard Generalized Markup Language), que existía desde los años 80 pero era notoriamente complejo. El objetivo era crear un formato que fuera legible tanto para humanos como para máquinas, lo suficientemente estricto para evitar ambigüedades y lo suficientemente flexible para cualquier dominio. Durante la primera década de los 2000, XML fue *el* formato de intercambio de datos. Servicios web SOAP, feeds RSS, feeds Atom, XHTML — todo era XML. Luego llegó JSON y se apoderó del espacio de APIs web, pero XML mantuvo cada dominio donde sus características únicas (namespaces, schemas, transformaciones) realmente importan.
El desarrollador XML moderno
La mayoría de los desarrolladores hoy trabajan en entornos híbridos. Usan JSON para APIs web y comunicación en tiempo real, y XML para procesamiento de documentos, integración empresarial y cumplimiento regulatorio. Conocer ambos formatos — y cuándo usar cada uno — es una habilidad genuinamente valiosa.
Seguridad XML: XXE y otros peligros
Si hay una cosa de XML que mantiene despiertos a los ingenieros de seguridad por la noche, es XXE — ataques de XML External Entity. Y honestamente, debería preocuparte también. XXE ha estado en la lista OWASP Top 10 con buena razón, y sigue atrapando desarrolladores desprevenidos en 2026.
Así funciona XXE: XML te permite definir "entidades" — esencialmente variables — en la declaración de tipo de documento (DTD). Una entidad *externa* puede referenciar una URL o una ruta de archivo en el servidor. Si el parser está configurado para resolver entidades externas (muchos lo están por defecto), un atacante puede crear XML que lee archivos arbitrarios de tu servidor:
Cuando el parser procesa esto, reemplaza &xxe; con el contenido de /etc/passwd. Así de simple, un atacante lee archivos sensibles de tu sistema. En ataques más avanzados, incluso pueden hacer peticiones HTTP salientes desde tu servidor (Server-Side Request Forgery), o causar denegación de servicio con el infame ataque "billion laughs" — una expansión recursiva de entidades que consume toda la memoria disponible.
La solución es sencilla: deshabilitar el procesamiento de entidades externas. Así se hace en dos lenguajes populares:
Más allá de XXE, ten cuidado con la inyección XML — donde la entrada del usuario se inserta en XML sin el escapado adecuado. Es el equivalente XML de la inyección SQL. Siempre usa una biblioteca constructora de XML adecuada en lugar de concatenación de strings (lo cual mencioné en la sección de errores comunes, pero vale la pena repetirlo porque es *así* de importante).
La regla de oro: nunca parsees XML no confiable con la configuración por defecto del parser. Siempre deshabilita explícitamente la resolución de entidades externas, el procesamiento de DTD y el procesamiento de XInclude. Trata el XML del mundo exterior con la misma sospecha con la que tratarías la entrada de usuario en una consulta SQL.
XPath: Consultando XML como un profesional
Si trabajas con XML regularmente y no estás usando XPath, lo estás haciendo de la forma difícil. XPath es un lenguaje de consulta diseñado específicamente para navegar documentos XML, y es increíblemente poderoso una vez que le agarras el truco.
Piensa en XPath como selectores CSS pero para XML. En lugar de recorrer el DOM manualmente con bucles anidados, escribes una expresión concisa que selecciona exactamente los nodos que quieres. Aquí hay algunos ejemplos prácticos:
Así se usa XPath en JavaScript y Python — los dos lenguajes a los que más recurren los desarrolladores:
Algo que vale la pena mencionar: JSON no tiene un lenguaje de consulta integrado. El equivalente más cercano es jq, que es fantástico pero es una herramienta externa en lugar de una parte estandarizada del formato. XPath está integrado en el ecosistema XML — soportado nativamente por los navegadores, disponible en prácticamente todos los lenguajes de programación y estandarizado por el W3C. Es una de las ventajas competitivas genuinas de XML.
XPath también forma la base de XSLT (que selecciona nodos para transformar) y XQuery (un lenguaje de consulta completo para bases de datos XML). Una vez que aprendes XPath, has desbloqueado toda una familia de tecnologías XML.
XML en estándares específicos de la industria
Mencioné banca y salud antes, pero el alcance de XML en estándares específicos de la industria va mucho más profundo que eso. Aquí hay un recorrido por dominios donde XML no solo se usa — es *obligatorio*:
Legal: La industria legal depende fuertemente de XML para presentaciones judiciales y gestión de casos. LegalXML, desarrollado por OASIS, estandariza la presentación electrónica ante tribunales, citaciones legales y metadatos de casos. En EE.UU., muchos sistemas judiciales estatales exigen formatos de presentación electrónica basados en XML. Si estás construyendo tecnología legal, estás construyendo sobre XML.
Editorial: Aquí hay una que sorprende a la gente — cada ebook EPUB que has leído está construido sobre XML. Los archivos EPUB son archivos ZIP que contienen archivos de contenido XHTML (que son XML), un descriptor de paquete OPF (XML) y un documento de navegación (XML). DocBook, otro formato XML, ha sido el estándar para documentación técnica desde los años 90. O'Reilly Media famosamente usó DocBook durante años para producir sus libros en múltiples formatos de salida desde una única fuente XML.
Ciencia y matemáticas: MathML es el estándar del W3C para representar notación matemática en XML. Es soportado por todos los navegadores modernos y es esencial para publicaciones científicas en la web. Luego está Chemical Markup Language (CML) para estructuras moleculares, Astronomical Markup Language para datos estelares, y docenas de otros vocabularios XML científicos. Cuando la precisión y la representación inequívoca de datos importan — y en ciencia, siempre importan — XML cumple.
Gobierno y adquisiciones: Universal Business Language (UBL) es un estándar OASIS usado por gobiernos de todo el mundo para adquisiciones, facturación y gestión de cadena de suministro. La directiva de facturación electrónica de la Unión Europea esencialmente exige XML basado en UBL para facturación de empresa a gobierno. Si vendes a gobiernos europeos, estás enviando facturas XML.
Aviación: El Aeronautical Information Exchange Model (AIXM) define schemas XML para datos aeronáuticos — aeropuertos, espacios aéreos, ayudas de navegación, procedimientos. Cada sistema de gestión de vuelo, cada actualización de control de tráfico aéreo, cada NOTAM (Notice to Airmen) toca datos AIXM. Este es un dominio donde "simplemente cambiemos a JSON" no es una conversación que nadie tenga, porque las implicaciones de seguridad de una migración de formato serían enormes.
El hilo común en todas estas industrias es que eligieron XML porque necesitaban validación robusta, namespaces para combinar vocabularios y un formato que pudiera evolucionar durante décadas sin romper la compatibilidad hacia atrás. Esos requisitos no han cambiado.
SOAP vs REST: Por qué las APIs XML aún existen
Si empezaste tu carrera en la última década, podrías pensar que todas las APIs son REST con JSON. Pero entra en cualquier banco grande, compañía de seguros, telecomunicaciones o agencia gubernamental, y encontrarás servicios web SOAP manejando lógica de negocio crítica. Y hay buenas razones para ello.
SOAP (Simple Object Access Protocol) es un protocolo de mensajería basado en XML con algunas características que REST+JSON simplemente no ofrece de serie:
Contratos fuertes vía WSDL: Un archivo WSDL (Web Services Description Language) describe *todo* sobre un servicio SOAP — operaciones, estructuras de mensajes de entrada/salida, tipos de datos, endpoints. Puedes auto-generar código cliente desde un WSDL en Java, C#, Python o prácticamente cualquier lenguaje empresarial. Las APIs REST tienen OpenAPI/Swagger, pero la adopción es voluntaria. Con SOAP, el contrato es el servicio.
Manejo de errores integrado: SOAP tiene un elemento fault estandarizado con códigos de error, strings de error y elementos de detalle. Cada cliente SOAP sabe exactamente cómo parsear errores. ¿APIs REST? Cada API inventa su propio formato de error.
WS-Security: SOAP tiene un estándar de seguridad integral que soporta encriptación y firma a nivel de mensaje — no solo a nivel de transporte (TLS). Esto significa que un mensaje SOAP puede pasar por servidores intermediarios mientras permanece encriptado de extremo a extremo. Esto importa mucho en servicios financieros donde los mensajes se enrutan a través de múltiples sistemas.
Transacciones y confiabilidad: WS-AtomicTransaction y WS-ReliableMessaging proporcionan soporte de transacciones distribuidas y entrega garantizada. Estos son problemas difíciles que REST deja completamente al desarrollador de la aplicación.
Dicho esto, SOAP tiene desventajas reales: los mensajes son verbosos, la curva de aprendizaje es empinada, el debugging es doloroso, y la sobrecarga XML lo hace más lento que JSON para operaciones CRUD simples. Para nuevas APIs web y microservicios, REST+JSON es casi siempre la elección correcta. Pero para integraciones empresariales complejas — especialmente en industrias reguladas — la aplicación de contratos y las características de seguridad integradas de SOAP siguen siendo genuinamente valiosas.
Migrando de XML a JSON: Una guía práctica
En algún momento de tu carrera, alguien te pedirá migrar un sistema basado en XML a JSON. Antes de decir "claro, fácil", déjame mostrarte las trampas que sorprenden a todos.
Pérdida de atributos: Los elementos XML pueden tener tanto atributos como elementos hijos. Los objetos JSON solo tienen propiedades. Al convertir Dune, ¿dónde va id? ¿Dónde va format? ¿Dónde va el contenido de texto? Las convenciones comunes usan prefijos @ para atributos y #text para contenido de texto, pero no hay un estándar universal — y lo que sea que elijas, el otro sistema necesita entender tu convención.
Coerción de tipos: XML es inherentemente basado en texto. El string "42" en XML podría ser un entero, un float, un string o un código postal. JSON tiene tipos distintos. Durante la migración, necesitas reglas explícitas de mapeo de tipos, o terminarás con strings donde querías números (o peor, números donde querías strings — adiós ceros iniciales en códigos postales).
Ambigüedad de arrays: Esta es particularmente desagradable. En XML, si un elemento tiene un hijo, es un elemento único. Si tiene múltiples hijos con el mismo nombre, son naturalmente una colección. Pero JSON necesita saber de antemano si algo es un array o un valor único. Considera: Widget — ¿es item un string o un array de un elemento? Si otro pedido tiene tres items, la estructura cambia. Tu consumidor JSON necesita manejar ambos casos.
Pasos para una migración exitosa:
- Paso 1: Inventaría todos los schemas XML y documenta exactamente qué características estás usando (namespaces, atributos, contenido mixto, secciones CDATA, instrucciones de procesamiento).
- Paso 2: Diseña tu schema JSON primero, decidiendo explícitamente cómo manejar atributos, contenido mixto y arrays. Documenta cada decisión.
- Paso 3: Construye una capa de conversión (no una reescritura completa). Ejecuta ambos formatos en paralelo y compara las salidas.
- Paso 4: Migra los consumidores uno a la vez, manteniendo los endpoints XML activos hasta que todos hayan cambiado.
- Paso 5: Ejecuta sistemas paralelos durante al menos un ciclo de negocio completo (mes, trimestre o año dependiendo de tu dominio) antes de desmantelar XML.
Cuándo NO migrar: Si tu XML usa mucha mezcla de namespaces, transformaciones XSLT o reglas de negocio basadas en XPath, el costo de migración puede superar los beneficios. Además, si tu XML es mandado por un estándar regulatorio (HL7, ISO 20022, UBL), mantendrás XML de todas formas — agregar JSON solo añade un segundo formato que soportar.
Herramientas XML que todo desarrollador debería conocer
Trabajar con XML no tiene que ser doloroso si tienes las herramientas adecuadas. Aquí están las que yo uso:
xmllint: Viene con libxml2 y probablemente ya está en tu sistema. Valida XML contra schemas, formatea (pretty-print) XML y evalúa expresiones XPath — todo desde la línea de comandos. Es el curl del mundo XML: simple, rápido y está en todas partes.
Saxon: El estándar de oro para procesamiento XSLT y XQuery, desarrollado por Michael Kay (quien literalmente editó las especificaciones XSLT 2.0 y 3.0). Si estás haciendo transformaciones XSLT serias, Saxon es lo que quieres. La edición Home de código abierto maneja XSLT 3.0 y XPath 3.1.
XMLSpy (Altova): Un IDE XML comercial popular en empresas. Tiene editores visuales de schema, debuggers XSLT e integración con bases de datos. Es caro pero poderoso — particularmente útil cuando trabajas con schemas XSD masivos que son impracticables de editar a mano.
oXygen XML Editor: Mi favorito personal para trabajo intensivo con XML. Soporta debugging XSLT con ejecución paso a paso, evaluación XPath, edición con conocimiento de schema con auto-completado, y tiene excelente soporte para DITA y DocBook. Si escribes XSLT regularmente, oXygen se paga solo en una semana.
xmlstarlet: Un toolkit XML de línea de comandos que te permite consultar, editar, validar y transformar XML directamente desde la terminal. Piénsalo como sed y awk pero para XML. Es perfecto para scripts de shell y pipelines CI/CD donde necesitas extraer valores de archivos de configuración XML o modificar XML sobre la marcha.
Visual Studio Code con extensiones XML: Si ya estás en VS Code, la extensión "XML" de Red Hat te da validación de schema, auto-completado y formateo. Combinada con la extensión "XSLT/XPath", es un setup gratuito sorprendentemente capaz para trabajo ocasional con XML.
Pruébalo tú mismo
¿Necesitas conectar ambos mundos? Nuestro Convertidor XML a JSON maneja la transformación preservando la estructura de datos y los tipos. Si estás depurando XML, el XML Formatter hace legible hasta el XML más feo. Y antes de desplegar cualquier XML a producción, pásalo por el XML Validator para detectar problemas estructurales temprano.