XMLStreamWriter Java StAX With Examples

In last post we learned how to use Java StAX Iterator API to write XML, here we will use StAX cursor API to write XML file.

XMLStreamWriter

Java StAX Cursor API is very straight forward in creating XML and outputting it. We need to create XMLStreamWriter object and write data into it. Useful methods are writeStartDocument(), writeStartElement(), writeCharacters(), writeEndElement() and writeEndDocument().

XMLStreamWriter Example

Here we will create a HashMap and then write it to XML file.


package com.journaldev.xml.stax;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.util.HashMap;
import java.util.Map;
import javax.xml.stream.XMLOutputFactory;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamWriter;
public class StaxXMLStreamWriter {
    public static void main(String[] args) {
        String fileName = "/Users/pankaj/tmp/employee.xml";
        String rootElement = "Employee";
        StaxXMLStreamWriter xmlStreamWriter = new StaxXMLStreamWriter();
        Map<String,String> elementsMap = new HashMap<String, String>();
        elementsMap.put("id", "1");
        elementsMap.put("name", "Pankaj");
        elementsMap.put("age", "29");
        elementsMap.put("role", "Java Developer");
        elementsMap.put("gender", "Male");
        xmlStreamWriter.writeXML(fileName, rootElement, elementsMap);
    }
    private void writeXML(String fileName, String rootElement, Map<String, String> elementsMap) {
        XMLOutputFactory xmlOutputFactory = XMLOutputFactory.newInstance();
        try{
            XMLStreamWriter xmlStreamWriter = xmlOutputFactory.createXMLStreamWriter(new FileOutputStream(fileName), "UTF-8");
            //start writing xml file
            xmlStreamWriter.writeStartDocument("UTF-8", "1.0");
            xmlStreamWriter.writeCharacters("n");
            xmlStreamWriter.writeStartElement(rootElement);
            //write id as attribute
            xmlStreamWriter.writeAttribute("id", elementsMap.get("id"));
            //write other elements
            xmlStreamWriter.writeCharacters("nt");
            xmlStreamWriter.writeStartElement("name");
            xmlStreamWriter.writeCharacters("ntt"+elementsMap.get("name"));
            xmlStreamWriter.writeCharacters("nt");
            xmlStreamWriter.writeEndElement();
            xmlStreamWriter.writeCharacters("nt");
            xmlStreamWriter.writeStartElement("age");
            xmlStreamWriter.writeCharacters("ntt"+elementsMap.get("age"));
            xmlStreamWriter.writeCharacters("nt");
            xmlStreamWriter.writeEndElement();
            xmlStreamWriter.writeCharacters("nt");
            xmlStreamWriter.writeStartElement("gender");
            xmlStreamWriter.writeCharacters("ntt"+elementsMap.get("gender"));
            xmlStreamWriter.writeCharacters("nt");
            xmlStreamWriter.writeEndElement();
            xmlStreamWriter.writeCharacters("nt");
            xmlStreamWriter.writeStartElement("role");
            xmlStreamWriter.writeCharacters("ntt"+elementsMap.get("role"));
            xmlStreamWriter.writeCharacters("nt");
            xmlStreamWriter.writeEndElement();
            //write end tag of Employee element
            xmlStreamWriter.writeCharacters("n");
            xmlStreamWriter.writeEndElement();
            //write end document
            xmlStreamWriter.writeEndDocument();
            //flush data to file and close writer
            xmlStreamWriter.flush();
            xmlStreamWriter.close();
        }catch(XMLStreamException | FileNotFoundException e){
            e.printStackTrace();
        }
    }
}

When we execute above XMLStreamWriter example program, we get following XML file.


<?xml version="1.0" encoding="UTF-8"?>
<Employee id="1">
	<name>
		Pankaj
	</name>
	<age>
		29
	</age>
	<gender>
		Male
	</gender>
	<role>
		Java Developer
	</role>
</Employee>

Notice the use of writeCharacters() for pretty print XML else it will be in compact format.

By admin

Leave a Reply

%d bloggers like this: