XML Master: Guía completa

Aprende XML desde cero hasta convertirte en un experto con este contenido, ejemplos prácticos y tests de conocimiento.

Este curso completo te ayudará a dominar XML para aplicaciones web, intercambio de datos y más.

🧠 Fundamentos XML

¿Qué es XML?

XML (eXtensible Markup Language) es un lenguaje de marcas diseñado para almacenar y transportar información entre aplicaciones diversas en distintas plataformas.

Características principales:

  • No tiene etiquetas predefinidas, es el desarrollador quien las crea según el significado deseado.
  • Es extensible, permitiendo crear nuevas etiquetas a medida.
  • Separa el contenido de la presentación.
  • Facilita el intercambio de información entre sistemas heterogéneos.
Ejemplo: Si se trabaja con datos de química, se podrían crear etiquetas como <atomo>, <molecula>, <enlace>... o si se trabaja con datos de música, etiquetas como <partitura>, <compositor>, <movimiento>...

<?xml version="1.0" encoding="UTF-8"?>
<catalogo>
    <libro id="101">
        <titulo>XML para Expertos</titulo>
        <autor>Juan Pérez</autor>
    </libro>
</catalogo>

Un documento XML se compone de:

  1. Prólogo: Contiene la declaración XML, instrucciones de procesamiento, etc.
  2. Elemento raíz: Contiene todos los demás elementos. Solo puede haber uno.
  3. Elementos hijos: Etiquetas anidadas que estructuran la información.
  4. Atributos: Información adicional sobre los elementos.

Desarrollo Web
  • Separación de contenido (XML) y presentación (CSS/XSL)
  • AJAX para comunicación asíncrona
  • XHTML como formato bien formado de HTML
Intercambio de Datos
  • Formato estándar para APIs y servicios web
  • Integración entre sistemas heterogéneos
  • Configuración de aplicaciones
Nota: XML ha sido parcialmente reemplazado por JSON en muchas aplicaciones web modernas debido a su menor verbosidad, pero sigue siendo fundamental en muchos sistemas empresariales y aplicaciones que requieren validación estricta o procesamiento avanzado.

Software para gestionar XML

Edición

Puede crearse con cualquier editor de texto que reconozca XML:

  • Notepad++
  • Visual Studio Code
  • XMLSpy
  • Oxygen XML Editor
Validación

Se validan mediante analizadores (parsers):

  • No validadores: verifican que el documento esté "bien formado"
  • Validadores: verifican el contenido respecto a una DTD o Schema
Visualización

Se visualizan mediante:

  • Navegadores web
  • Transformación con CSS
  • Transformación con XSL
  • Aplicaciones específicas

📝 Sintaxis XML

Reglas básicas de sintaxis

La sintaxis de XML es estricta y debe seguir ciertas reglas para que el documento se considere "bien formado":

Regla Descripción Ejemplo
Elemento raíz único Todo documento XML debe tener un solo elemento raíz que contenga todos los demás elementos <raiz>...todo el contenido...</raiz>
Etiquetas balanceadas Todas las etiquetas deben tener su correspondiente cierre <elemento>contenido</elemento>
Elementos anidados correctamente Las etiquetas deben cerrarse en el orden inverso al que se abrieron <a><b>texto</b></a> (correcto)
<a><b>texto</a></b> (incorrecto)
Atributos entre comillas Los valores de los atributos deben ir siempre entre comillas (simples o dobles) <libro id="123"> o <libro id='123'>
Sensible a mayúsculas/minúsculas XML distingue entre mayúsculas y minúsculas <Elemento> y <elemento> son diferentes
Elementos vacíos Pueden escribirse de dos formas <elemento/> o <elemento></elemento>

Caracteres especiales

Algunos caracteres tienen significado especial en XML y deben ser escapados usando entidades:

Carácter Entidad Descripción
< &lt; Menor que (se usa para abrir etiquetas)
> &gt; Mayor que (se usa para cerrar etiquetas)
& &amp; Ampersand (se usa para entidades)
' &apos; Comilla simple
" &quot; Comilla doble
Nota: También se pueden representar caracteres usando su código Unicode:
&#nnn; (decimal) o &#xhh; (hexadecimal)
Ejemplo: &#241; o &#xF1; para la letra "ñ"
<?xml version="1.0" encoding="UTF-8"?>
<texto_con_entidades>
    <parrafo>El símbolo &lt; se usa para iniciar etiquetas y &amp; para entidades.</parrafo>
    <formula>a &lt; b &amp;&amp; b &gt; c</formula>
    <español>La letra &#241; es característica del espa&#241;ol.</español>
</texto_con_entidades>

Prólogo XML

El prólogo XML es opcional pero recomendable. Contiene información sobre el documento XML:

Declaración XML
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
  • version: Versión de XML (generalmente 1.0)
  • encoding: Codificación de caracteres (UTF-8, ISO-8859-1, etc.)
  • standalone: Indica si el documento es autónomo ("yes") o depende de definiciones externas ("no")
Instrucciones de procesamiento
<?xml-stylesheet type="text/css" href="estilo.css"?>
<?xml-stylesheet type="text/xsl" href="transformacion.xsl"?>

Estas instrucciones indican cómo debe procesarse el documento XML, como aplicar hojas de estilo (CSS) o transformaciones (XSL).

Comentarios en XML

Los comentarios en XML permiten incluir notas o aclaraciones que no afectan al contenido del documento:

<?xml version="1.0" encoding="UTF-8"?>
<!-- Este es un comentario en XML -->
<libro>
    <titulo>El Reino del Dragón de Oro</titulo>
    <!-- Este es el título del libro -->
    <autor>Isabel Allende</autor>
</libro>
Importante: Los comentarios:
  • No pueden contener la cadena "--" en su interior
  • No pueden incluirse dentro de etiquetas
  • No pueden anidarse (un comentario dentro de otro)

🏗️ Elementos y atributos

Elementos XML

Los elementos son los bloques de construcción básicos de un documento XML. Cada elemento consiste en una etiqueta de apertura, contenido y una etiqueta de cierre.

<libro>
    <titulo>El ingenioso hidalgo Don Quijote de la Mancha</titulo>
    <autor>Miguel de Cervantes</autor>
    <anio>1605</anio>
</libro>

Tipos de elementos:

Tipo Descripción Ejemplo
Elemento con contenido Contiene texto y/o elementos hijos <titulo>Don Quijote</titulo>
Elemento vacío No tiene contenido <imagen src="portada.jpg"/>
Elemento padre Contiene otros elementos <libro>...</libro>
Elemento hijo Está contenido dentro de otro elemento <autor>...</autor> dentro de <libro>

Nomenclatura de elementos

Las reglas para nombrar elementos XML son:

  • Pueden contener letras, números, guiones, puntos y guiones bajos
  • No pueden empezar con números, puntos o el prefijo "xml" (en cualquier combinación de mayúsculas/minúsculas)
  • No pueden contener espacios ni caracteres especiales
  • Deben ser significativos y descriptivos del contenido

Atributos XML

Los atributos proporcionan información adicional sobre los elementos XML. Se colocan dentro de la etiqueta de apertura y siguen el formato nombre="valor".

<libro isbn="978-84-376-0494-7" edicion="2" idioma="es">
    <titulo>El ingenioso hidalgo Don Quijote de la Mancha</titulo>
    <autor>Miguel de Cervantes</autor>
</libro>
¿Cuándo usar atributos vs. elementos?

Esta es una decisión de diseño común en XML. Algunas guías:

  • Elementos: para datos que son parte del contenido, especialmente si pueden contener subcomponentes o si su longitud es variable.
  • Atributos: para metadatos, identificadores o características que califican al elemento pero no son el contenido principal.
Ventajas de atributos Desventajas de atributos
  • Sintaxis más compacta
  • Ideal para datos simples
  • Claramente asociados al elemento
  • No pueden contener elementos hijos
  • No pueden tener múltiples valores (a menos que se separen por espacios)
  • Más difíciles de expandir en el futuro

CDATA y secciones especiales

Las secciones CDATA (Character Data) permiten incluir bloques de texto que no serán interpretados como marcado XML, útil para código, fórmulas o texto con muchos caracteres especiales.

<codigo_javascript>
<![CDATA[
    function validar() {
        if (x < 10 && y > 20) {
            return true;
        } else {
            return "Error: x debe ser < 10";
        }
    }
]]>
</codigo_javascript>
																			
Importante: Dentro de una sección CDATA:
  • Los caracteres <, >, & y otros especiales son tratados como texto normal
  • No se procesan etiquetas XML ni entidades
  • La única restricción es que no puede contener la secuencia "]]>"

🔍 Espacios de nombres (Namespaces)

¿Qué son los espacios de nombres?

Los espacios de nombres en XML resuelven problemas de ambigüedad cuando se combinan documentos XML de diferentes fuentes o dominios que pueden usar los mismos nombres de elementos para diferentes propósitos.

Problema: Imagina que combinamos dos vocabularios XML diferentes que usan el elemento <titulo> - uno para libros y otro para personas (títulos nobiliarios).
<?xml version="1.0" encoding="UTF-8"?>
<!-- Sin espacios de nombres (ambiguo) -->
<datos>
    <titulo>Don Quijote de la Mancha</titulo>  <!-- ¿Libro o título nobiliario? -->
    <titulo>Don</titulo>                       <!-- ¿Libro o título nobiliario? -->
</datos>

Declaración de espacios de nombres

Se declaran usando el atributo especial xmlns (XML Namespace):

<?xml version="1.0" encoding="UTF-8"?>
<datos xmlns:libro="http://www.ejemplo.com/libros"
          xmlns:persona="http://www.ejemplo.com/personas">

    <libro:titulo>Don Quijote de la Mancha</libro:titulo>
    <persona:titulo>Don</persona:titulo>
</datos>

Espacio de nombres por defecto

Se puede declarar un espacio de nombres por defecto que aplica a todos los elementos sin prefijo:

<?xml version="1.0" encoding="UTF-8"?>
<libros xmlns="http://www.ejemplo.com/libros"
           xmlns:editorial="http://www.ejemplo.com/editorial">

    <libro>                              <!-- Usa el namespace por defecto -->
        <titulo>Don Quijote</titulo>    <!-- Usa el namespace por defecto -->
        <editorial:nombre>Anaya</editorial:nombre>  <!-- Usa namespace editorial -->
    </libro>
</libros>
Importante: Los espacios de nombres se aplican al elemento donde se declaran y a todos sus descendientes, a menos que se sobrescriban.

✅ Validación de XML

Documentos "Bien formados" vs "Válidos"

Documento bien formado

Un documento XML está "bien formado" cuando:

  • Cumple todas las reglas sintácticas de XML
  • Tiene un solo elemento raíz
  • Todos los elementos están correctamente anidados
  • Todas las etiquetas están balanceadas
  • Atributos con valores entre comillas
Documento válido

Un documento XML es "válido" cuando:

  • Está bien formado
  • Y además: Se ajusta a una estructura definida por un esquema (DTD, XML Schema, RelaxNG)
  • Contiene los elementos y atributos correctos
  • Elementos en el orden definido
  • Valores que cumplen con los tipos de datos establecidos

DTD es el sistema de validación más antiguo para XML. Define la estructura y los elementos permitidos en un documento XML.

<!-- DTD interna -->
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE biblioteca [
  <!ELEMENT biblioteca (libro+)>
  <!ELEMENT libro (titulo, autor, anio?)>
  <!ELEMENT titulo (#PCDATA)>
  <!ELEMENT autor (#PCDATA)>
  <!ELEMENT anio (#PCDATA)>
  <!ATTLIST libro 
    id ID #REQUIRED
    categoria (ficcion|historia|ciencia) "ficcion">
]>

<biblioteca>
  <libro id="lib1" categoria="ficcion">
    <titulo>El Quijote</titulo>
    <autor>Miguel de Cervantes</autor>
    <anio>1605</anio>
  </libro>
</biblioteca>
Nota: También se puede referenciar una DTD externa: <!DOCTYPE biblioteca SYSTEM "biblioteca.dtd">
Elementos de una DTD
Declaración Descripción Ejemplo
ELEMENT Define un elemento y su contenido <!ELEMENT autor (#PCDATA)>
ATTLIST Define atributos para un elemento <!ATTLIST libro id ID #REQUIRED>
ENTITY Define entidades personalizadas <!ENTITY editor "Editorial Anaya">
NOTATION Define notaciones para datos no-XML <!NOTATION JPEG SYSTEM "image/jpeg">
Indicadores de ocurrencia en DTD
  • ? - Opcional (0 o 1)
  • * - Cero o más veces
  • + - Una o más veces
  • nada - Exactamente una vez
  • (a|b|c) - Una de las opciones
  • (a,b,c) - Secuencia en ese orden
  • #PCDATA - Texto (Parsed Character Data)
  • EMPTY - Elemento vacío

XML Schema (XSD) es un sistema de validación más moderno y poderoso que DTD, con mejor soporte para tipos de datos, espacios de nombres y estructuras complejas.

XML a validar
<?xml version="1.0" encoding="UTF-8"?>
<biblioteca xmlns="http://www.ejemplo.com/biblioteca"
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xsi:schemaLocation="http://www.ejemplo.com/biblioteca biblioteca.xsd">

  <libro id="L1">
    <titulo>Cien años de soledad</titulo>
    <autor>
      <nombre>Gabriel</nombre>
      <apellido>García Márquez</apellido>
    </autor>
    <anio>1967</anio>
    <precio>19.95</precio>
  </libro>
</biblioteca>
XSD (Schema)
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
              targetNamespace="http://www.ejemplo.com/biblioteca"
              xmlns="http://www.ejemplo.com/biblioteca"
              elementFormDefault="qualified">

  <xs:element name="biblioteca">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="libro" maxOccurs="unbounded">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="titulo" type="xs:string"/>
              <xs:element name="autor">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="nombre" type="xs:string"/>
                    <xs:element name="apellido" type="xs:string"/>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element name="anio" type="xs:integer"/>
              <xs:element name="precio" type="xs:decimal"/>
            </xs:sequence>
            <xs:attribute name="id" type="xs:ID" use="required"/>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

</xs:schema>
Ventajas de XML Schema sobre DTD
  • Basado en sintaxis XML
  • Soporte para espacios de nombres
  • 40+ tipos de datos integrados
  • Tipos de datos personalizados
  • Herencia de tipos
  • Mejor manejo de contenido mixto
  • Validación de datos más rica
  • Definición de patrones con expresiones regulares
Nota: XML Schema es una recomendación oficial del W3C y es ampliamente utilizado en aplicaciones empresariales e intercambio de datos B2B.

🏆 Buenas prácticas XML

Mejores prácticas para XML

Seguir estas prácticas recomendadas te ayudará a crear documentos XML más mantenibles, legibles y eficientes:

Estructura y diseño
  • Usa nombres descriptivos para elementos y atributos
  • Mantén una jerarquía lógica y coherente
  • Evita estructuras demasiado profundas
  • Usa atributos para metadatos, elementos para datos
  • Sé consistente con la capitalización (camelCase o kebab-case)
Sintaxis y formato
  • Usa indentación consistente (2 o 4 espacios)
  • Incluye siempre la declaración XML
  • Especifica el encoding apropiado (UTF-8)
  • Usa CDATA para código o contenido con caracteres especiales
  • Mantén los comentarios útiles y actualizados
Validación y calidad
  • Valida siempre contra un esquema (XSD, DTD)
  • Separa la definición del esquema del documento
  • Usa espacios de nombres cuando combinas vocabularios
  • Minimiza el uso de entidades personalizadas
  • Prueba con diferentes parsers XML

Lista de verificación XML

Utiliza esta lista para evaluar la calidad de tus documentos XML:

🔬 Laboratorio interactivo XML

Editor y validador XML

Utiliza este editor interactivo para crear, editar y validar documentos XML en tiempo real:

Resultados de validación
Haz clic en "Validar XML" para comprobar el documento.

Vista previa del árbol XML

La vista en árbol aparecerá al validar el XML correctamente.

Ejercicios prácticos

Crea un documento XML para un catálogo de productos con las siguientes características:

  • Al menos 3 productos diferentes
  • Cada producto debe tener: id, nombre, precio, descripción y categoría
  • Añade al menos un atributo (por ejemplo: disponibilidad="si")
  • Incluye un comentario explicativo
<?xml version="1.0" encoding="UTF-8"?>
<!-- Catálogo de productos para tienda en línea -->
<catalogo fecha="2023-10-15">
    <producto id="P001" disponibilidad="si">
        <nombre>Smartphone Galaxy S21</nombre>
        <precio moneda="EUR">799.99</precio>
        <descripcion>Smartphone con pantalla AMOLED de 6.2", 8GB RAM, 128GB almacenamiento</descripcion>
        <categoria>Electrónica</categoria>
    </producto>
    <producto id="P002" disponibilidad="si">
        <nombre>Zapatillas Running Air Zoom</nombre>
        <precio moneda="EUR">129.95</precio>
        <descripcion>Zapatillas de running con amortiguación mejorada y transpirables</descripcion>
        <categoria>Deportes</categoria>
    </producto>
    <producto id="P003" disponibilidad="no">
        <nombre>Libro "Cien años de soledad"</nombre>
        <precio moneda="EUR">15.50</precio>
        <descripcion>Novela del escritor colombiano Gabriel García Márquez</descripcion>
        <categoria>Libros</categoria>
    </producto>
</catalogo>

Crea un documento XML para una biblioteca de películas e incluye una DTD interna que defina la estructura.

  • Define elementos para película, título, director, año, género
  • El elemento película debe tener un atributo id obligatorio
  • El elemento género debe ser una enumeración (acción, comedia, drama, etc.)
  • El año debe ser opcional
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE filmoteca [
  <!ELEMENT filmoteca (pelicula+)>
  <!ELEMENT pelicula (titulo, director, anio?, genero)>
  <!ELEMENT titulo (#PCDATA)>
  <!ELEMENT director (#PCDATA)>
  <!ELEMENT anio (#PCDATA)>
  <!ELEMENT genero (#PCDATA)>
  <!ATTLIST pelicula 
    id ID #REQUIRED>
  <!ATTLIST genero 
    tipo (accion|comedia|drama|ciencia-ficcion|terror|romance) #REQUIRED>
]>

<filmoteca>
  <pelicula id="p1">
    <titulo>El Padrino</titulo>
    <director>Francis Ford Coppola</director>
    <anio>1972</anio>
    <genero tipo="drama">Drama criminal</genero>
  </pelicula>
  <pelicula id="p2">
    <titulo>Interestelar</titulo>
    <director>Christopher Nolan</director>
    <genero tipo="ciencia-ficcion">Ciencia ficción</genero>
  </pelicula>
</filmoteca>

Crea un documento XML que combine información de dos dominios diferentes utilizando espacios de nombres:

  • Un espacio para información de contacto (nombre, email, teléfono)
  • Un espacio para información de pedidos (productos, cantidades, precios)
  • Utiliza prefijos claros para cada espacio de nombres
<?xml version="1.0" encoding="UTF-8"?>
<sistema xmlns:contacto="http://www.ejemplo.com/contactos"
            xmlns:pedido="http://www.ejemplo.com/pedidos">

    <cliente id="C001">
        <contacto:informacion>
            <contacto:nombre>María González</contacto:nombre>
            <contacto:email>maria.gonzalez@ejemplo.com</contacto:email>
            <contacto:telefono tipo="movil">+34 612 345 678</contacto:telefono>
            <contacto:direccion>
                <contacto:calle>Calle Mayor 25</contacto:calle>
                <contacto:ciudad>Madrid</contacto:ciudad>
                <contacto:cp>28001</contacto:cp>
            </contacto:direccion>
        </contacto:informacion>

        <pedido:historial>
            <pedido:orden id="O12345" fecha="2023-09-28">
                <pedido:producto codigo="P789">
                    <pedido:nombre>Monitor LED 27"</pedido:nombre>
                    <pedido:cantidad>1</pedido:cantidad>
                    <pedido:precio moneda="EUR">249.99</pedido:precio>
                </pedido:producto>
                <pedido:producto codigo="P456">
                    <pedido:nombre>Teclado mecánico</pedido:nombre>
                    <pedido:cantidad>2</pedido:cantidad>
                    <pedido:precio moneda="EUR">89.95</pedido:precio>
                </pedido:producto>
                <pedido:total moneda="EUR">429.89</pedido:total>
            </pedido:orden>
        </pedido:historial>
    </cliente>
</sistema>

🧪 Tests de conocimiento

Evalúa tu comprensión de XML

Responde a las siguientes preguntas para poner a prueba tus conocimientos sobre XML:

1. ¿Cuál de las siguientes afirmaciones sobre XML es FALSA?
2. ¿Cuál es el propósito principal de una DTD en XML?
3. ¿Qué significa que un documento XML esté "bien formado"?
4. ¿Para qué sirve una sección CDATA en XML?
5. ¿Cuál es la diferencia principal entre DTD y XML Schema (XSD)?
6. ¿Cuándo es recomendable utilizar espacios de nombres en XML?
7. Identifica el error en el siguiente fragmento XML:
<libro>
    <titulo>Don Quijote de la Mancha</titulo>
    <autor>Miguel de Cervantes</autor>
    <precio>15.50</precio>
</Libro>
8. ¿Cuál es la ventaja principal de XML Schema (XSD) sobre DTD?
9. En XML, ¿qué significa que un elemento sea "vacío"?
10. ¿Cuál es la sintaxis correcta para una entidad XML?

📚 Recursos adicionales

Libros recomendados
  • XML: Visual QuickStart Guide
    Kevin Howard Goldberg
  • Beginning XML
    Joe Fawcett, Danny Ayers, Liam R. E. Quin
  • XML: La biblia
    Elliotte Rusty Harold
Consejo para el aprendizaje

La mejor manera de aprender XML es practicando con proyectos reales. Intenta crear documentos XML para diferentes casos de uso como catálogos de productos, feeds RSS, configuraciones de aplicaciones o intercambio de datos entre sistemas.