Die in Java 6 hinzugefügte Streaming-API für XML bietet eine praktische Schnittstelle XMLStreamWriter, die zum Schreiben von XML-Dokumenten verwendet wird. Diese API erfordert nicht den Aufbau einer bestimmten Objektstruktur wie in DOM und die Durchführung von Zwischenaufgaben. Es unterstützt standardmäßig auch Namespaces, was in fortgeschritteneren Situationen sehr nützlich ist.

Methoden, die integriert werden, um ein XMLStreamWriter-Objekt zu erstellen und Daten darin zu schreiben, sind unten wie folgt aufgeführt:

  • writeStartDocument()
  • writeStartElement()
  • schreibeZeichen()
  • writeEndElement()
  • writeEndDocument()

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

  1. 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.
  2. XMLStreamWriter rückt seine Ausgabe nicht ein, daher kann es mit einem einfachen Texteditor etwas schwierig sein, sie zu lesen. 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.

Verfahren:

  1. Erstellen Sie eine Instanz von XMLStreamWriter mit XMLOutputFactory
  2. Schreiben Sie den Header des XML und fahren Sie mit dem Schreiben von Elementen fort.
  3. Nach dem Hinzufügen von Elementen können wir Attribute, Zeichendaten oder CDATA hinzufügen
  4. Geöffnete Elemente schließen
  5. Elemente leeren oder Kommentare schreiben
  6. Schließen und beenden Sie das XML-Dokument

Lassen Sie uns nun mehr darüber diskutieren, wie sie später geschrieben werden, wenn wir sie in unserem Java-Programm implementieren.

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

XMLOutputFactory outputFactory = XMLOutputFactory.newFactory();
XMLStreamWriter xmlStreamWriter = outputFactory.createXMLStreamWriter(outputStream);

Schritt 2: Schreiben Sie den Header des XML und fahren Sie mit dem Schreiben von Elementen fort.

xmlStreamWriter.writeStartElement("gfg");

Schritt 3: Nach dem Hinzufügen von Elementen können wir Attribute, Zeichendaten oder CDATA hinzufügen.

xmlStreamWriter.writeAttribute("id", "10");
xmlStreamWriter.writeCharacters("hello world!");
xmlStreamWriter.writeCData("more text data");

Schritt 4: Geöffnete Elemente schließen

xmlStreamWriter.writeEndElement();

Schritt 5: Leeren Sie Elemente oder schreiben Sie Kommentare, aber beachten Sie, dass dies ein optionaler Schritt ist

xmlStreamWriter.writeEmptyElement("used & new");
xmlStreamWriter.writeComment("Thank you!");

Schritt 6: Schließen und beenden Sie das XML-Dokument.

xmlStreamWriter.writeEndDocument();
xmlStreamWriter.close();

Beispiel

Java

// Java Program to Illustrate XMLStreamWriter in Java StAX
  
// Importing required classes
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.UnsupportedEncodingException;
import java.io.Writer;
import javax.xml.stream.XMLOutputFactory;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamWriter;
  
// Main class
public class StaxXMLStreamWriter {
  
    // Main driver method
    public static void main(String[] args)
        throws FileNotFoundException, XMLStreamException,
               UnsupportedEncodingException
    {
  
        // Try block to check for exceptions
        try {
  
            // File Path
            String filePath = "D:\\gfg_file.xml";
  
            // Creating FileWriter object
            Writer fileWriter = new FileWriter(filePath);
  
            // Getting the XMLOutputFactory instance
            XMLOutputFactory xmlOutputFactory
                = XMLOutputFactory.newInstance();
  
            // Creating XMLStreamWriter object from
            // xmlOutputFactory.
            XMLStreamWriter xmlStreamWriter
                = xmlOutputFactory.createXMLStreamWriter(
                    fileWriter);
  
            // Addoing elements to xmlStreamWriter
            // Custom input element addition
            xmlStreamWriter.writeStartElement("gfg");
            xmlStreamWriter.writeAttribute("id", "10");
            xmlStreamWriter.writeCharacters("hello world!");
            xmlStreamWriter.writeCData("more text data");
            xmlStreamWriter.writeEndElement();
            xmlStreamWriter.writeEmptyElement("used & new");
            xmlStreamWriter.writeComment("Thank you!");
            xmlStreamWriter.writeEndDocument();
  
            // Writing the content on XML file and
            // close xmlStreamWriter using close() method
            xmlStreamWriter.flush();
            xmlStreamWriter.close();
  
            // Display message for successful execution of
            // program
            System.out.println(
                "XML file created successfully.");
        }
  
        // Catch block to handle exceptions
        catch (Exception e) {
  
            // Print the line number where exception occurs
            e.printStackTrace();
        }
    }
}

Ausgabe:

<gfg id="10">hello world!
<![CDATA[more text data]]>
</gfg>
<used & new/>
<!--Thank you!-->

Fazit: 

Die Streaming-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 .