Advanced Java Services | StAX XMLStreamWriter |
Das Interface javax.xml.stream.XMLStreamWriter ist das Gegenstück zum XMLStreamReader. Realisiert wird es, wie nicht anders zu erwarten, über eine entsprechende Factory. Mit der so erhaltenen Instanz kann man XML-Dateien sehr einfach erstellen. Wir wollen die folgende Datei erzeugen:
<?xml version="1.0" ?> <buch> <titel>Deutschland, ein Wintermaerchen</titel> <autor>Heinrich Heine</autor> <isbn type="10">3-86688-192-9</isbn> </buch>
Da der Code recht einfach ist, verzichten wir auf eine eigene Klasse.
import java.io.FileWriter; import java.io.IOException; import javax.xml.stream.FactoryConfigurationError; import javax.xml.stream.XMLOutputFactory; import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamWriter; /** * @author hms * * Schreiben mit Hilfe eines XMLStreamWriters * Gegenstück zu StreamReader * * Attribute müssen VOR dem text geschrieben werden, sonst * javax.xml.stream.XMLStreamException: Attribute not associated with any element */ public class SAX_4_StAX_XMLStreamWriter { public static void main(String[] args) { XMLOutputFactory factory = XMLOutputFactory.newInstance(); XMLStreamWriter xmlStreamWriter = null; try { xmlStreamWriter = factory.createXMLStreamWriter(new FileWriter("test.xml")); System.out.println("start writing"); xmlStreamWriter.writeStartDocument(); // <?xml version="1.0" ?> xmlStreamWriter.writeCharacters("\n"); xmlStreamWriter.writeStartElement("buch"); // <> wird ergänzt xmlStreamWriter.writeCharacters("\n"); xmlStreamWriter.writeStartElement("titel"); xmlStreamWriter.writeCharacters("Deutschland, ein Wintermaerchen"); xmlStreamWriter.writeEndElement(); xmlStreamWriter.writeCharacters("\n"); xmlStreamWriter.writeStartElement("autor"); xmlStreamWriter.writeCharacters("Heinrich Heine"); xmlStreamWriter.writeEndElement(); // </autor> xmlStreamWriter.writeCharacters("\n"); xmlStreamWriter.writeStartElement("isbn"); xmlStreamWriter.writeAttribute("type", "10"); // xmlStreamWriter.writeCharacters("3-86688-192-9"); xmlStreamWriter.writeEndElement(); // </isbn> xmlStreamWriter.writeCharacters("\n"); xmlStreamWriter.writeEndElement(); // </buch> xmlStreamWriter.writeCharacters("\n"); System.out.println("end writing"); } catch (FactoryConfigurationError | XMLStreamException | IOException ex) { ex.printStackTrace(); } finally { if (xmlStreamWriter != null) try { xmlStreamWriter.close(); System.out.println("writer closed"); } catch (XMLStreamException ex) { ex.printStackTrace(); } } } }