Trabajo con XML en Java: DOM, SAX, StAX y JAXB — guía completa

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Trabajo con XML en Java: DOM, SAX, StAX y JAXB



XML (eXtensible Markup Language) sigue siendo uno de los formatos clave para almacenar y transmitir datos estructurados. En Java existen varias bibliotecas integradas y populares para trabajar con XML. En este artículo analizaremos todos los enfoques principales: desde los clásicos DOM y SAX hasta el moderno JAXB.



1. DOM (Document Object Model) — acceso completo al documento



El analizador DOM carga todo el documento XML en la memoria como una estructura de árbol. Esto proporciona control total sobre el documento: se pueden leer, modificar, eliminar y agregar nodos.



Ventajas de DOM:

  • Acceso aleatorio a cualquier elemento del documento
  • Posibilidad de modificar la estructura XML
  • Modelo de objetos intuitivo


Desventajas:

  • Alto consumo de memoria (todo el documento en RAM)
  • Rendimiento lento con archivos grandes


Ejemplo de uso de DOM:

import javax.xml.parsers.*;import org.w3c.dom.*;import java.io.*;

public class DomExample { public static void main(String[] args) throws Exception { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.parse(new File("books.xml"));

NodeList bookList = document.getElementsByTagName("book"); for (int i = 0; i < bookList.getLength(); i++) { Element book = (Element) bookList.item(i); String title = book.getElementsByTagName("title").item(0).getTextContent(); String author = book.getElementsByTagName("author").item(0).getTextContent(); System.out.println(title + " — " + author); } }}


2. SAX (Simple API for XML) — análisis por flujo



SAX es un analizador orientado a eventos. Lee XML secuencialmente y llama a métodos callback al encontrar una etiqueta de apertura/cierre, texto o atributos. El consumo de memoria es mínimo.



Cuándo usar SAX:

  • Archivos XML enormes (cientos de megabytes)
  • Solo lectura, sin modificación
  • Recursos limitados del dispositivo


Ejemplo de analizador SAX:

import org.xml.sax.*;import org.xml.sax.helpers.*;import javax.xml.parsers.*;

public class SaxExample { public static void main(String[] args) throws Exception { SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser saxParser = factory.newSAXParser();

DefaultHandler handler = new DefaultHandler() { boolean isTitle = false;

public void startElement(String uri, String localName, String qName, Attributes attributes) { if (qName.equalsIgnoreCase("title")) isTitle = true; }

public void characters(char ch[], int start, int length) { if (isTitle) { System.out.println("Title: " + new String(ch, start, length)); isTitle = false; } } };

saxParser.parse("books.xml", handler); }}


3. StAX (Streaming API for XML) — análisis por flujo conveniente



StAX es un compromiso entre DOM y SAX. También funciona en modo de flujo, pero proporciona una interfaz pull más conveniente (usted mismo solicita el siguiente elemento).



Dos formas de trabajar con StAX:

  • XMLStreamReader — para lectura
  • XMLStreamWriter — para escritura


import javax.xml.stream.*;import java.io.*;

public class StaxExample { public static void main(String[] args) throws Exception { XMLInputFactory factory = XMLInputFactory.newInstance(); XMLStreamReader reader = factory.createXMLStreamReade

Recommendations