Parser Java SAX - Visão geral
SAX (Simple API for XML) é um analisador baseado em eventos para documentos XML. Ao contrário de um analisador DOM, um analisador SAX não cria nenhuma árvore de análise. SAX é uma interface de streaming para XML, o que significa que os aplicativos que usam SAX recebem notificações de eventos sobre o documento XML que está sendo processado como um elemento e um atributo, em um momento em ordem sequencial começando no topo do documento e terminando com o fechamento do Elemento ROOT.
Lê um documento XML de cima para baixo, reconhecendo os tokens que constituem um documento XML bem formado.
Os tokens são processados na mesma ordem em que aparecem no documento.
Relata ao programa de aplicativo a natureza dos tokens que o analisador encontrou conforme eles ocorrem.
O programa de aplicação fornece um manipulador de "evento" que deve ser registrado com o analisador.
Conforme os tokens são identificados, os métodos de retorno de chamada no manipulador são chamados com as informações relevantes.
Quando usar?
Você deve usar um analisador SAX quando -
Você pode processar o documento XML de maneira linear de cima para baixo.
O documento não está profundamente aninhado.
Você está processando um documento XML muito grande cuja árvore DOM consumiria muita memória. Implementações típicas de DOM usam dez bytes de memória para representar um byte de XML.
O problema a ser resolvido envolve apenas uma parte do documento XML.
Os dados estão disponíveis assim que são vistos pelo analisador, portanto, SAX funciona bem para um documento XML que chega por meio de um fluxo.
Desvantagens de SAX
Não temos acesso aleatório a um documento XML, pois ele é processado apenas de forma direta.
Se você precisar controlar os dados que o analisador viu ou alterar a ordem dos itens, deverá escrever o código e armazenar os dados por conta própria.
Interface ContentHandler
Essa interface especifica os métodos de retorno de chamada que o analisador SAX usa para notificar um programa de aplicativo sobre os componentes do documento XML que ele viu.
void startDocument() - Chamado no início de um documento.
void endDocument() - Chamado no final de um documento.
void startElement(String uri, String localName, String qName, Attributes atts) - Chamado no início de um elemento.
void endElement(String uri, String localName,String qName) - Chamado no final de um elemento.
void characters(char[] ch, int start, int length) - Chamado quando os dados do personagem são encontrados.
void ignorableWhitespace( char[] ch, int start, int length) - Chamado quando um DTD está presente e um espaço em branco ignorável é encontrado.
void processingInstruction(String target, String data) - Chamado quando uma instrução de processamento é reconhecida.
void setDocumentLocator(Locator locator)) - Fornece um localizador que pode ser usado para identificar posições no documento.
void skippedEntity(String name) - Chamado quando uma entidade não resolvida é encontrada.
void startPrefixMapping(String prefix, String uri) - Chamado quando um novo mapeamento de namespace é definido.
void endPrefixMapping(String prefix) - Chamado quando uma definição de namespace termina seu escopo.
Interface de atributos
Esta interface especifica métodos para processar os atributos conectados a um elemento.
int getLength() - Retorna o número de atributos.
String getQName(int index)
String getValue(int index)
String getValue(String qname)