Die Java StAX-API wurde in Java 6 eingeführt und gilt als überlegen gegenüber DOM- und SAX-Parsern. Wir können den Java StAX-Parser verwenden, um XML-Dateien zu lesen, und die Java-Streaming-API für XML (Java StAX) bietet eine Implementierung für die Verarbeitung von XML in Java. Die XMLEventWriter -Klasse in der Java-StAX-API ermöglicht es Ihnen, StAX-XMLEvents entweder in einen Writer, einen OutputStream oder ein Ergebnis (spezielles JAXP-Objekt) zu schreiben.

Methoden, die von XMLEventWriter bereitgestellt werden, um Daten darin zu schreiben:

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

Es gibt bestimmte Einschränkungen mit XMLEventWriter in Java StAX, von denen hauptsächlich die folgenden sind:

  1. XMLEventWriter rückt seine Ausgabe nicht ein, sodass sie mit einem einfachen Texteditor möglicherweise etwas schwer zu lesen ist. Daher wird zum Lesen empfohlen, es in einem Webbrowser zu öffnen, von denen die meisten über eine benutzerfreundliche Oberfläche verfügen, um die Struktur von XML-Dokumenten anzuzeigen.
  2. Es ist immer noch möglich, nicht wohlgeformte XML-Dokumente zu erstellen, die beispielsweise mehr als ein Root-Element enthalten oder eine Namespace-Definition verpassen.

Verfahren:

  • Erstellen einer Instanz von XMLEventWriter
  • Schreiben des Headers des XML
  • Aussagen erstellen
  •  Fügen Sie Elemente hinzu, damit wir Attribute und Namespaces hinzufügen können.
  • Geöffnete Elemente spülen und schließen
  • Try-and-Catch-Block hinzufügen

Sie sind wie folgt dargestellt:

Schritt 1: Erstellen Sie eine Instanz von XMLEventWriter mit XMLOutputFactory.

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

Schritt 2: Schreiben Sie den Header des XML und fahren Sie mit der Erstellung von Startelementen fort.

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

Schritt 3: Nach dem Hinzufügen von Elementen können wir Attribute und Namespace hinzufügen.

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

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

Schritt 4: Geöffnete Elemente spülen und schließen.

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

Schritt 5: Try-and-Catch-Block hinzufügen.

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

Beispiel

Java

// 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();
        }
    }
}

Ausgabe:

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

Hinweis: Die Streaming Event Writer-API für XML bietet eine sehr bequeme, schnelle und speichereffiziente Möglichkeit, XML-Dokumente zu schreiben, ohne sich um Details kümmern und Sonderzeichen maskieren zu müssen. Es ist eine großartige Alternative zu DOM, insbesondere wenn Sie den DOM-Baum aus irgendeinem Grund nicht im Speicher behalten und verwalten müssen.