Автор оригинала: 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 – файл в консоли.