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 Também na biblioteca
SwiftyUserDefaults para Swift: guia completo com exemplos
Trabalhando com CSV em Rust: biblioteca csv e processamento de dados
Async/Await em Swift: guia completo com exemplos práticos
Aprendizado de Máquina em Kotlin: visão geral das bibliotecas KMath, Smile, KotlinDL e DeepLearning4J
gRPC em Rust: bibliotecas Tonic e Grpc-rs com exemplos