Formateador XML

Formatear y embellecer documentos XML

1
Entendiendo Formato XML
TL;DR

XML es un lenguaje de marcado para datos estructurados. A pesar del auge de JSON, XML sigue siendo dominante en sistemas empresariales, APIs SOAP, SVG y mensajería financiera.

¿Qué es XML?

XML (eXtensible Markup Language) es un lenguaje de marcado diseñado para almacenar y transportar datos estructurados. A diferencia de HTML, que tiene un conjunto fijo de etiquetas para mostrar contenido, XML te permite definir tus propias etiquetas — convirtiéndolo en un meta-lenguaje para crear formatos de datos personalizados.

XML fue publicado como una recomendación W3C en 1998, diseñado para ser tanto legible por humanos como analizable por máquinas. Surgió de SGML (Standard Generalized Markup Language), simplificando la complejidad mientras retenía el poder de describir datos estructurados de cualquier tipo.

Aunque JSON ha reemplazado en gran medida a XML para APIs web e intercambio de datos ligero, XML permanece profundamente integrado en la informática empresarial. La mensajería financiera (ISO 20022), salud (HL7 FHIR), sistemas gubernamentales, formatos de documentos (OOXML, ODF) y gráficos vectoriales (SVG) dependen de XML como su base.

Elementos, atributos y espacios de nombres

Elementos

Los elementos son los bloques de construcción de XML. Un elemento consiste en una etiqueta de apertura, contenido y una etiqueta de cierre:

<title>Understanding XML</title>

Los elementos pueden contener texto, otros elementos (hijos) o una mezcla de ambos. Los elementos vacíos pueden usar la sintaxis de auto-cierre:

<separator />

Atributos

Los atributos proporcionan metadatos adicionales sobre un elemento. Aparecen como pares nombre-valor dentro de la etiqueta de apertura:

<book id="42" language="en">
  <title>1984</title>
</book>

Un debate común es si usar elementos o atributos para los datos. La guía general: usa atributos para metadatos (IDs, tipos, flags) y elementos para contenido de datos (nombres, valores, descripciones).

Espacios de nombres

Los espacios de nombres resuelven el problema de las colisiones de nombres de elementos al combinar múltiples vocabularios XML en un solo documento. Un espacio de nombres se declara con el atributo xmlns y se asocia con un prefijo:

<invoice xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2"
         xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">
  <cbc:ID>INV-001</cbc:ID>
  <cac:AccountingSupplierParty>
    <cac:Party>
      <cbc:Name>Acme Corp</cbc:Name>
    </cac:Party>
  </cac:AccountingSupplierParty>
</invoice>

Sin espacios de nombres, un elemento <ID> de un esquema podría entrar en conflicto con un elemento <ID> de otro. Los espacios de nombres hacen que cada elemento sea globalmente único al combinar la URI del espacio de nombres con el nombre local del elemento.

Por qué XML persiste

A pesar de la dominancia de JSON en el desarrollo web, XML no va a desaparecer. Varias características lo mantienen indispensable:

CaracterísticaVentaja de XML
Validación de esquemaXSD proporciona sistemas de tipos ricos, restricciones y herencia — mucho más allá de JSON Schema
Espacios de nombresPermiten combinar múltiples vocabularios en un solo documento sin conflictos
Contenido mixtoLos elementos pueden contener tanto texto como elementos hijo — esencial para documentos y marcado
TransformaciónXSLT permite la transformación declarativa de documentos XML a otros formatos
Herramientas madurasDécadas de analizadores, validadores, editores y librerías probados en batalla
Ecosistema de estándaresISO 20022, SOAP, SVG, XHTML, RSS, UBL, HL7 — construidos sobre XML

XML sobresale donde los documentos necesitan ser validados contra esquemas formales, transformados a diferentes formatos o combinados de múltiples fuentes. JSON sobresale donde la simplicidad, compactidad e interoperabilidad con JavaScript son prioridades.

XML vs JSON

AspectoXMLJSON
SintaxisEtiquetas con atributosPares clave-valor
VerbosidadAlta (etiquetas de apertura + cierre)Baja (llaves, corchetes)
Tipos de datosSolo texto (los esquemas agregan tipos)6 tipos incorporados
ComentariosSoportados (<!-- -->)No soportados
Espacios de nombresSoporte completoNo aplica
EsquemaXSD, DTD, RelaxNGJSON Schema
AnálisisDOM, SAX, StAXJSON.parse()
Uso principalEmpresarial, documentosAPIs, configuraciones
Tamaño de archivoMayorMenor

Para APIs web, JSON es la elección clara — es más compacto, analizado nativamente por JavaScript y más simple de trabajar. Para integración empresarial, formatos de documentos e industrias reguladas, las capacidades de validación de esquema, espacios de nombres y transformación de XML lo convierten en la mejor opción.

Casos de uso comunes

  • Mensajería financiera: Los mensajes ISO 20022 (pacs.008, pain.001, camt.053) usan XML para instrucciones de pago, estados de cuenta y reportes a través de redes bancarias globales
  • Servicios web SOAP: Las APIs empresariales en banca, seguros y gobierno usan sobres SOAP — documentos XML intercambiados sobre HTTP
  • Gráficos vectoriales: SVG (Scalable Vector Graphics) es un formato basado en XML usado en todos los sitios web modernos para íconos, logos e ilustraciones
  • Formatos de documentos: Microsoft Office (OOXML), LibreOffice (ODF) y EPUB son archivos ZIP que contienen archivos XML
  • Feeds web: Los feeds RSS y Atom usan XML para sindicar publicaciones de blog, artículos de noticias y episodios de podcast
  • Configuración: Maven (pom.xml), manifiestos de Android, configuraciones Spring XML y pipelines CI/CD (algunos Jenkins) usan XML
  • Salud: Los documentos HL7 FHIR y CDA usan XML para intercambiar registros de pacientes y datos clínicos entre sistemas de salud

Prueba estos ejemplos

XML formateado con elementos anidados Válido

Un documento XML bien formado que demuestra elementos anidados, atributos (id, genre, number), contenido de texto e indentación correcta. La declaración XML especifica la versión 1.0 y la codificación UTF-8.

<?xml version="1.0" encoding="UTF-8"?> <library> <book id="1" genre="fiction"> <title>1984</title> <author>George Orwell</author> <year>1949</year> <chapters> <chapter number="1">The clocks were striking thirteen.</chapter> <chapter number="2">It was a bright cold day in April.</chapter> </chapters> </book> </library>
XML con espacio de nombres Válido

Un sobre SOAP que usa espacios de nombres XML. El prefijo 'soap' mapea al esquema del sobre SOAP, y el prefijo 'm' mapea a un espacio de nombres personalizado del servicio de acciones. Los espacios de nombres previenen colisiones de nombres de elementos entre diferentes vocabularios.

<?xml version="1.0"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Header /> <soap:Body> <m:GetPrice xmlns:m="http://www.example.org/stock"> <m:StockName>AAPL</m:StockName> </m:GetPrice> </soap:Body> </soap:Envelope>