XML EventWriter in der Java StAX-API
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:
- 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.
- 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.