Parser Java StAX - Visão geral
StAX é uma API baseada em Java para analisar documentos XML de maneira semelhante ao analisador SAX. Mas existem duas diferenças principais entre as duas APIs -
StAX é uma API PULL, enquanto SAX é uma API PUSH. Isso significa que no caso do analisador StAX, um aplicativo cliente precisa solicitar ao analisador StAX para obter informações do XML sempre que necessário. Mas, no caso do analisador SAX, um aplicativo cliente é necessário para obter informações quando o analisador SAX notifica o aplicativo cliente de que as informações estão disponíveis.
StAX API pode ler e escrever documentos XML. Usando SAX API, um arquivo XML só pode ser lido.
Configuração de ambiente
Para usar o analisador StAX, você deve ter stax.jar no classpath de seu aplicativo.
A seguir estão os recursos da API StAX -
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 aplicativo fornece um leitor de "evento" que atua como um iterador e itera sobre o evento para obter as informações necessárias. Outro leitor disponível é o "cursor" que atua como um ponteiro para os nós XML.
Conforme os eventos são identificados, os elementos XML podem ser recuperados do objeto de evento e podem ser processados posteriormente.
Quando usar?
Você deve usar um analisador StAX 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, StAX 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, uma vez que ele é processado somente de encaminhamento.
Se você precisa acompanhar os dados que o analisador viu ou onde o analisador alterou a ordem dos itens, você deve escrever o código e armazenar os dados por conta própria.
Classe XMLEventReader
Esta classe fornece iterador de eventos que pode ser usado para iterar sobre eventos conforme eles ocorrem durante a análise de um documento XML.
StartElement asStartElement() - Usado para recuperar o valor e os atributos de um elemento.
EndElement asEndElement() - Chamado no final de um elemento.
Characters asCharacters() - Pode ser usado para obter caracteres como CDATA, espaço em branco, etc.
Classe XMLEventWriter
Esta interface especifica métodos para criar um evento.
add(Event event) - Adicionar eventos contendo elementos ao XML.
Classe XMLStreamReader
Esta classe fornece iterador de eventos que pode ser usado para iterar sobre eventos conforme eles ocorrem durante a análise de um documento XML.
int next() - Usado para recuperar o próximo evento.
boolean hasNext() - Usado para verificar se outros eventos existem ou não.
String getText() - Usado para obter o texto de um elemento.
String getLocalName() - Usado para obter o nome de um elemento.
Classe XMLStreamWriter
Esta interface especifica métodos para criar um evento.
writeStartElement(String localName) - Adicione um elemento inicial do nome fornecido.
writeEndElement(String localName) - Adicione um elemento final do nome fornecido.
writeAttribute(String localName, String value) - Grave atributos em um elemento.