StAX Parser - Visão geral
StAX é uma API baseada em JAVA para analisar documentos XML de maneira semelhante ao analisador SAX. Mas existem dois pontos principais de diferença entre as duas APIs -
StAX é uma API PULL, enquanto SAX é uma API PUSH. Isso significa que no caso do analisador StAX, o aplicativo cliente precisa pedir ao analisador StAX para obter informações de XML sempre que precisar, mas no caso do analisador SAX, o aplicativo cliente é necessário para obter informações quando o analisador SAX notifica o aplicativo cliente dessa informação está disponível.
StAX API pode ler e escrever documentos XML. Usando SAX API, xml pode ser apenas lido.
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 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 leitor de "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 forma linear de cima para baixo.
O documento não está profundamente aninhado.
Você está processando um documento XML muito grande, cuja árvore DOM consumirá 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 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, 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.
Classe XMLEventReader
Esta classe fornece o iterador de eventos que pode ser usado para iterar os eventos à medida que ocorrem durante a análise do documento XML
StartElement asStartElement() - Usado para recuperar o valor e os atributos do 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) - Adiciona eventos contendo elementos ao XML.
Classe XMLStreamReader
Esta classe fornece iterador de eventos que podem ser usados para iterar sobre os eventos à medida que ocorrem durante a análise do 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) - Adiciona o elemento inicial de um determinado nome.
writeEndElement(String localName) - Adiciona o elemento final de um determinado nome.
writeAttribute(String localName, String value) - Escreve atributo para um elemento.