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

Как написать XML-файл на Java с помощью API итератора Java StAX

API потоковой передачи Java для XML или API Java StAX был представлен в Java 6 и считался превосходящим парсеры DOM и SAX. Как объяснялось в предыдущем посте о

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

API потоковой передачи Java для XML или API Java StAX был представлен в Java 6 и считался превосходящим парсеры DOM и SAX. Как объяснялось в предыдущем посте об API Java StAX , он состоит из API на основе курсора и API на основе итератора.

Здесь мы увидим, как мы можем написать XML-файл на java с помощью API на основе итератора StAX (XMLEventWriter).

package com.journaldev.xml;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

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.Characters;
import javax.xml.stream.events.EndElement;
import javax.xml.stream.events.StartDocument;
import javax.xml.stream.events.StartElement;
import javax.xml.stream.events.XMLEvent;

public class StaxXMLWriter {

    public static void main(String[] args) {
        String fileName = "/Users/pankaj/employee.xml";
        String rootElement = "Employee";
        StaxXMLWriter xmlWriter = new StaxXMLWriter();
        Map elementsMap = new HashMap();
        elementsMap.put("name", "Pankaj");
        elementsMap.put("age", "29");
        elementsMap.put("role", "Java Developer");
        elementsMap.put("gender", "Male");
        
        xmlWriter.writeXML(fileName, rootElement, elementsMap);
    }
    
    public void writeXML(String fileName, String rootElement, Map elementsMap){
        XMLOutputFactory xmlOutputFactory = XMLOutputFactory.newInstance();
        try {
            XMLEventWriter xmlEventWriter = xmlOutputFactory
                    .createXMLEventWriter(new FileOutputStream(fileName), "UTF-8");
            //For Debugging - below code to print XML to Console
            //XMLEventWriter xmlEventWriter = xmlOutputFactory.createXMLEventWriter(System.out);
            XMLEventFactory eventFactory = XMLEventFactory.newInstance();
            XMLEvent end = eventFactory.createDTD("\n");
            StartDocument startDocument = eventFactory.createStartDocument();
            xmlEventWriter.add(startDocument);
            xmlEventWriter.add(end);
            StartElement configStartElement = eventFactory.createStartElement("",
                "", rootElement);
            xmlEventWriter.add(configStartElement);
            xmlEventWriter.add(end);
            // Write the element nodes
            Set elementNodes = elementsMap.keySet();
            for(String key : elementNodes){
                createNode(xmlEventWriter, key, elementsMap.get(key));
            }
            
            xmlEventWriter.add(eventFactory.createEndElement("", "", rootElement));
            xmlEventWriter.add(end);
            xmlEventWriter.add(eventFactory.createEndDocument());
            xmlEventWriter.close();

        } catch (FileNotFoundException | XMLStreamException e) {
            e.printStackTrace();
        }
    }
    
    private static void createNode(XMLEventWriter eventWriter, String element,
            String value) throws XMLStreamException {
          XMLEventFactory xmlEventFactory = XMLEventFactory.newInstance();
          XMLEvent end = xmlEventFactory.createDTD("\n");
          XMLEvent tab = xmlEventFactory.createDTD("\t");
          //Create Start node
          StartElement sElement = xmlEventFactory.createStartElement("", "", element);
          eventWriter.add(tab);
          eventWriter.add(sElement);
          //Create Content
          Characters characters = xmlEventFactory.createCharacters(value);
          eventWriter.add(characters);
          // Create End node
          EndElement eElement = xmlEventFactory.createEndElement("", "", element);
          eventWriter.add(eElement);
          eventWriter.add(end);

        }

}

Вышеуказанная программа создает ниже XML-файл:

Вышеуказанная программа создает ниже XML-файл:



	29
	Pankaj
	Male
	Java Developer

Я использовал \n и \t элементы для создания форматированного XML, но для экономии памяти и сокращения времени обработки вы можете удалить их из реализации.

Также для целей отладки вы можете изменить выходной поток на System.out , чтобы распечатать XML – файл в консоли.