Trabalho com XML em Java: DOM, SAX, StAX e JAXB — guia completo

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Trabalho com XML em Java: DOM, SAX, StAX e JAXB



XML (eXtensible Markup Language) continua sendo um dos principais formatos para armazenamento e transmissão de dados estruturados. Em Java, existem várias bibliotecas integradas e populares para trabalhar com XML. Neste artigo, abordaremos todas as principais abordagens: desde os clássicos DOM e SAX até o moderno JAXB.



1. DOM (Document Object Model) — acesso completo ao documento



O parser DOM carrega todo o documento XML na memória como uma estrutura em árvore. Isso oferece controle total sobre o documento: é possível ler, modificar, remover e adicionar nós.



Vantagens do DOM:

  • Acesso aleatório a qualquer elemento do documento
  • Possibilidade de modificar a estrutura do XML
  • Modelo de objeto intuitivo


Desvantagens:

  • Alto consumo de memória (documento inteiro na RAM)
  • Trabalho lento com arquivos grandes


Exemplo de uso do 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) — parsing em fluxo



SAX é um parser orientado a eventos. Ele lê o XML sequencialmente e chama métodos de callback ao encontrar tags de abertura/fechamento, texto ou atributos. O consumo de memória é mínimo.



Quando usar SAX:

  • Arquivos XML enormes (centenas de megabytes)
  • Apenas leitura, sem modificação
  • Recursos limitados do dispositivo


Exemplo de parser 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) — parsing em fluxo conveniente



StAX é um compromisso entre DOM e SAX. Ele também funciona em modo de fluxo, mas oferece uma interface pull mais conveniente (você mesmo solicita o próximo elemento).



Duas formas de trabalhar com StAX:

  • XMLStreamReader — para leitura
  • XMLStreamWriter — para escrita


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