Ejemplo 8: API DOM XML con JavaScript
Parsea, recorre y modifica XML directamente en el navegador, sin recargar la página
🎯 ¿En qué consiste este ejemplo?
A diferencia de los ejemplos anteriores (procesados en PHP en el servidor), este funciona
enteramente en tu navegador, con JavaScript. Usa DOMParser para
convertir texto en un documento XML real, createElement() /
appendChild() para modificarlo, y XMLSerializer para volver a
convertirlo en texto. Todo ocurre en memoria, al instante, sin enviar nada al servidor.
Editor XML
Añadir libro (createElement + appendChild)
Buscar por título (getElementsByTagName)
Estado
Documento XML actual (serializado con XMLSerializer)
📖 Explicación del Código
Código JavaScript Completo (resumido)
const parser = new DOMParser();
const xmlDoc = parser.parseFromString(texto, "application/xml");
const raiz = xmlDoc.getElementsByTagName("biblioteca")[0];
const nodoLibro = xmlDoc.createElement("libro");
const nodoTitulo = xmlDoc.createElement("titulo");
nodoTitulo.textContent = "Nuevo libro";
nodoLibro.appendChild(nodoTitulo);
raiz.appendChild(nodoLibro);
const serializer = new XMLSerializer();
const textoFinal = serializer.serializeToString(xmlDoc);
📝 DOMParser
¿Qué hace? Convierte una cadena de texto en un documento XML navegable por el navegador, igual que simplexml_load_string() hace en PHP, pero en el lado del cliente.
💡 Concepto: parsererror
Si el XML no es válido, parseFromString no lanza una excepción: inserta un elemento <parsererror> dentro del documento resultante, y hay que comprobarlo manualmente con querySelector('parsererror').
📝 createElement() y appendChild()
raiz.appendChild(nodo);
¿Qué hace? createElement() crea un nodo nuevo (todavía "flotando", sin sitio en el árbol). appendChild() lo inserta como último hijo de otro nodo, modificando el árbol DOM en memoria.
📝 XMLSerializer
¿Qué hace? Hace el proceso inverso a DOMParser: convierte el árbol DOM (ya modificado) de nuevo a una cadena de texto XML, que es lo que se muestra en el editor y en la salida.
🎯 Conceptos Clave Aprendidos
DOM XML en el navegador
DOMParserconvierte texto en árbolXMLSerializerconvierte árbol en texto- Todo ocurre sin recargar la página
Modificar el árbol
createElement()crea nodos nuevosappendChild()los insertatextContentfija su contenido
Recorrer y buscar
getElementsByTagName()busca por etiqueta- Devuelve una colección tipo array
- Se puede combinar con
.textContentpara filtrar
💪 Ejercicio Práctico
Amplía la manipulación del DOM
- Parsea el XML, añade dos libros nuevos y busca por una palabra del título
- Provoca un error a propósito (borra una etiqueta de cierre) y observa el mensaje de
parsererror - Piensa cómo eliminarías un libro del documento (pista:
removeChild()sobre su nodo padre)
Eliminar un nodo con removeChild()
const libros = xmlDoc.getElementsByTagName("libro");
const primerLibro = libros[0];
primerLibro.parentNode.removeChild(primerLibro);
removeChild() se llama sobre el padre, indicándole qué hijo concreto eliminar.