Bien formado no significa válido para tu sistema
Un XML bien formado tiene un único elemento raíz, etiquetas correctamente anidadas, atributos citados y caracteres especiales escapados. Una validación contra XSD o DTD añade reglas sobre elementos permitidos, orden y tipos. Un formateador puede comprobar la primera capa, pero no conoce automáticamente el esquema empresarial esperado.
Namespaces evitan colisiones
Dos vocabularios pueden usar el nombre id con significados distintos. Un namespace los distingue mediante una URI. En <factura xmlns="urn:ejemplo:factura">, los elementos sin prefijo pertenecen al namespace predeterminado. En <cat:producto xmlns:cat="urn:ejemplo:catalogo">, el prefijo cat es solo un alias local.
No compares únicamente el prefijo: otro documento puede usar c para la misma URI y ser semánticamente equivalente. Al convertir a JSON decide cómo preservar la URI, los prefijos o ambos; eliminarlos puede mezclar propiedades que originalmente eran diferentes.
CDATA conserva texto sin interpretar marcado
Una sección CDATA permite incluir caracteres como < y & como texto hasta la secuencia de cierre. No convierte el contenido en un nuevo árbol XML ni lo vuelve seguro para HTML. Al analizar, CDATA y texto escapado pueden producir un valor textual equivalente, aunque su representación original sea distinta.
Entidades y caracteres escapados
XML usa entidades predefinidas como <, > y &. El parser las resuelve como caracteres. Escapar dos veces produce texto distinto: &lt; representa literalmente <. Antes de “limpiar” entidades, identifica cuántas capas de serialización existen.
DOCTYPE y recursos externos
Una declaración DOCTYPE puede definir entidades y referenciar recursos. Procesadores históricos podían resolver entidades externas, lo que requiere especial cuidado con XML no confiable. Las herramientas web prudentes no deberían cargar recursos externos arbitrarios al formatear o convertir. Nexo Útil analiza el texto en el navegador y no necesita resolver documentos externos para mostrar la estructura.
Si tu flujo empresarial depende de una DTD, utiliza un validador controlado que conozca el esquema y sus políticas. Un conversor genérico no puede prometer equivalencia completa.
Atributos y elementos no son intercambiables
<persona id="7">Ana</persona> contiene atributo y texto. JSON no tiene una representación universal para esa combinación. Un conversor puede elegir {"@id":"7","#text":"Ana"}, otro separar metadatos y otro perder información. Revisa la convención antes de integrar el resultado.
Orden, repetición y valores vacíos
XML conserva el orden de elementos hermanos y permite repetir nombres. Un objeto JSON con claves únicas no expresa directamente ambas propiedades. Además, <valor/>, un elemento ausente, una cadena vacía y null pueden tener significados distintos. Define estas decisiones como parte del contrato, no después de convertir.
Procedimiento antes de transformar
- Valida que el XML esté completo y bien formado.
- Identifica namespaces y el esquema, si existe.
- Decide cómo representar atributos, texto, repetición y orden.
- Desactiva o controla la resolución de recursos externos.
- Convierte una muestra que incluya CDATA, entidades y valores vacíos.
- Compara el resultado con reglas de negocio, no solo visualmente.
- Conserva el original si necesitas una transformación reversible.
Qué puede hacer con seguridad un formateador
Puede detectar errores de sintaxis, aplicar sangría, retirar espacios de presentación y facilitar la lectura. No debería cambiar nombres, ordenar elementos, resolver entidades remotas ni afirmar que cumple un XSD que no recibió. Por ese motivo, formatear y convertir son acciones separadas en Nexo Útil.