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

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 formas de trabalhar com XML, cada uma adequada para diferentes tarefas: desde a leitura de pequenas configurações até o processamento de arquivos de gigabytes. Neste artigo, abordaremos quatro abordagens principais: DOM, SAX, StAX e JAXB.



1. DOM (Document Object Model) — carregamento completo na memória



O parser DOM carrega todo o documento XML na memória, criando uma estrutura em árvore. Isso é conveniente para navegação e modificação, mas ineficiente para arquivos grandes.



Exemplo de leitura de XML com DOM:



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

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

NodeList bookList = doc.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("Livro: " + title + ", autor: " + author); } }}


  • Vantagens: acesso conveniente a qualquer nó, suporte a XPath, possibilidade de modificar o documento.
  • Desvantagens: requer muita memória, lento para arquivos grandes.
  • Quando usar: arquivos de configuração, documentos pequenos (até alguns MB).


2. SAX (Simple API for XML) — parser de fluxo orientado a eventos



SAX lê XML sequencialmente e gera eventos (início do elemento, texto, fim do elemento). Você processa apenas os eventos necessários — isso permite trabalhar com arquivos de qualquer tamanho.



Exemplo de processamento de XML com SAX:



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

public class SaxExample extends DefaultHandler { private boolean inTitle = false;

public void startElement(String uri, String localName, String qName, Attributes attrs) { if (qName.equals("title")) inTitle = true; }

public void characters(char[] ch, int start, int length) { if (inTitle) System.out.println("Título: " + new String(ch, start, length)); }

public void endElement(String uri, String localName, String qName) { if (qName.equals("title")) inTitle = false; }

public static void main(String[] args) throws Exception { SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser parser = factory.newSAXParser(); parser.parse("books.xml", new SaxExample()); }}


  • Vantagens: consumo mínimo de memória, alta velocidade.
  • Desvantagens: não é possível retornar ao elemento anterior, difícil modificar o documento.
  • Quando usar: arquivos XML grandes (logs, dumps de BD, relatórios).


3. StAX (Streaming API for XML) — parser de fluxo com controle de cursor



StAX é uma alternativa mais moderna ao SAX. Você mesmo controla a leitura, movendo o cursor pelo fluxo XML. Dois modos estão disponíveis: Cursor API (iterador de eventos) e Event API (processamento de eventos).



Exemplo com Cursor API (XMLStreamReader):



import javax.xml.stream.*;

public class StaxExample { public static void main(String[] args) throws Exceptio

Recommendations