Java StAX API foi introduzido no Java 6 e considerado superior aos analisadores DOM e SAX. Podemos usar o analisador Java StAX para ler o arquivo XML e a API de streaming java para XML (Java StAX) fornece implementação para processamento de XML em java. A classe XMLEventWriter na API Java StAX permite que você escreva StAX XMLEvent para um gravador, um OutputStream ou um Result (objeto JAXP especial).

Métodos fornecidos por XMLEventWriter para gravar dados nele:

  • createStartDocument()
  • createStartElement()
  • createAttribute()
  • createNamespace()
  • createEndElement()

Existem certas limitações anexadas ao XMLEventWriter em java StAX, das quais principalmente as seguintes:

  1. O XMLEventWriter não recua sua saída, por isso pode ser um pouco difícil de ler usando um editor de texto simples. Portanto, para a leitura, sugere-se abri-lo em um navegador da Web, a maioria dos quais possui uma interface amigável para visualizar a estrutura dos documentos XML.
  2. Ainda é possível criar documentos XML não bem formados que, por exemplo, contêm mais de um elemento raiz ou definição de namespace ausente.

Procedimento:

  • Criação de uma instância de XMLEventWriter
  • Escrevendo o cabeçalho do XML
  • Crie declarações
  •  Adicione elementos para que possamos adicionar atributos, namespaces.
  • Limpar e fechar elementos abertos
  • Adicionar bloco try and catch

Eles são ilustrados abaixo como segue:

Etapa 1: Crie uma instância de XMLEventWriter usando XMLOutputFactory.

XMLOutputFactory factory = XMLOutputFactory.newInstance();
XMLEventFactory eventFactory = XMLEventFactory.newInstance();
XMLEventWriter writer =factory.createXMLEventWriter(
new FileWriter("F:\\gfg-XmlFile.xml"));

Etapa 2: Grave o cabeçalho do XML e prossiga para criar os elementos iniciais.

XMLEvent event = eventFactory.createStartDocument();
event = eventFactory.createStartElement("GFG", "https://www.geeksforgeeks.org/", "document");

Passo 3: Depois de adicionar elementos, podemos adicionar atributos, namespace.

event = eventFactory.createNamespace("GeeksforGeeks-practice",
"https://practice.geeksforgeeks.org/");

writer.add(event);
event = eventFactory.createAttribute("attribute", "value");
writer.add(event);

Etapa 4: Lave e feche os elementos abertos.

writer.flush();
writer.close();

Etapa 5: adicione o bloco try and catch.

try 
    {
  ----------code------------
    } 
catch (XMLStreamException e) 
    {
     e.printStackTrace();
    } 
catch (IOException e) 
    {
    e.printStackTrace();
    }

Exemplo

// Java Program to Illustarte XML EventWriter in StAX API
  
// Importing required classes
import java.io.*;
import javax.xml.stream.XMLEventFactory;
import javax.xml.stream.XMLEventWriter;
import javax.xml.stream.XMLOutputFactory;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.events.XMLEvent;
  
// Main class
class GFG {
  
    // Main driver method
    public static void main(String[] args)
    {
  
        // Getting the XMLOutputFactory instance
        XMLOutputFactory factory
            = XMLOutputFactory.newInstance();
  
        // Getting the XMLEventFactory instance
        XMLEventFactory eventFactory
            = XMLEventFactory.newInstance();
  
        // Try block to check for exceptions
        try {
  
            // Creating EventWriter object
            XMLEventWriter writer
                = factory.createXMLEventWriter(
                    new FileWriter("F:\\gfg-XmlFile.xml"));
            XMLEvent event
                = eventFactory.createStartDocument();
            writer.add(event);
  
            // Creating a start element
            event = eventFactory.createStartElement(
                "GFG", "https://www.geeksforgeeks.org/",
                "document");
            writer.add(event);
  
            // Cteating namespace
            event = eventFactory.createNamespace(
                "GeeksforGeeks-practice",
                "https://practice.geeksforgeeks.org/");
            writer.add(event);
  
            // Setting attributes
            event = eventFactory.createAttribute(
                "attribute", "GFG");
            writer.add(event);
  
            // Lastly creating ana end element
            event = eventFactory.createEndElement(
                "GFG", "http://gfg.com", "document");
            writer.add(event);
  
            // Flush and close xmlEventWriter
            // using close() and flush() method
            // It is always a good practice
            writer.flush();
            writer.close();
        }
  
        // Catch block to handle exceptions
        catch (XMLStreamException e) {
  
            // Print line number where exception occurs
            // using printStacktrace() method
            e.printStackTrace();
        }
        catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Saída:

<?xml version='1.0' encoding='UTF-8'?>
<GFG:document xmlns:GeeksforGeeks-practice="https://practice.geeksforgeeks.org/" attribute="GFG>
</GFG:document>

Nota: Streaming Event Writer API para XML fornece uma maneira muito conveniente, rápida e com uso eficiente de memória para escrever documentos XML sem se preocupar com detalhes e caracteres especiais de escape. É uma ótima alternativa ao DOM, especialmente quando você não precisa manter e gerenciar a árvore DOM na memória por qualquer motivo.