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.