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 También en la biblioteca
Generación de PDF en Kotlin: bibliotecas y herramientas (iText, Apache PDFBox)
Geolocalización y mapas en TypeScript: bibliotecas, API y ejemplos de código
Cliente Elasticsearch para C++: elasticlient y guía completa