Рубрики
Без рубрики

XMLStreamWriter Java StAX

Пример XMLStreamWriter, Пример API Java StAX для записи xml-файла, красивая печать XMLStreamWriter, запись символов, документ writeStartDocument, элемент writeStartElement

Автор оригинала: Pankaj Kumar.

В прошлом посте мы узнали , как использовать API итератора Java StAX для записи XML, здесь мы будем использовать API курсора StAX для записи XML-файла.

XMLStreamWriter

Java StAX Cursor API очень прост в создании XML и его выводе. Нам нужно создать XMLStreamWriter объект и записать в него данные. Полезными методами являются writeStartDocument() , writeStartElement() , writeCharacters() , writeEndElement() и writeEndDocument() .

Пример XMLStreamWriter

Здесь мы создадим хэш-карту, а затем запишем ее в XML-файл.

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 elementsMap = new HashMap();
        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 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("\n\t");
            xmlStreamWriter.writeStartElement("name");
            xmlStreamWriter.writeCharacters("\n\t\t"+elementsMap.get("name"));
            xmlStreamWriter.writeCharacters("\n\t");
            xmlStreamWriter.writeEndElement();
            
            xmlStreamWriter.writeCharacters("\n\t");
            xmlStreamWriter.writeStartElement("age");
            xmlStreamWriter.writeCharacters("\n\t\t"+elementsMap.get("age"));
            xmlStreamWriter.writeCharacters("\n\t");
            xmlStreamWriter.writeEndElement();
            
            xmlStreamWriter.writeCharacters("\n\t");
            xmlStreamWriter.writeStartElement("gender");
            xmlStreamWriter.writeCharacters("\n\t\t"+elementsMap.get("gender"));
            xmlStreamWriter.writeCharacters("\n\t");
            xmlStreamWriter.writeEndElement();
            
            xmlStreamWriter.writeCharacters("\n\t");
            xmlStreamWriter.writeStartElement("role");
            xmlStreamWriter.writeCharacters("\n\t\t"+elementsMap.get("role"));
            xmlStreamWriter.writeCharacters("\n\t");
            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();
        }
    }

}

Когда мы выполняем приведенный выше пример программы XMLStreamWriter, мы получаем следующий XML-файл.



	
		Pankaj
	
	
		29
	
	
		Male
	
	
		Java Developer
	

Обратите внимание на использование writeCharacters() для довольно печатного XML, иначе он будет в компактном формате.