Create XML file in Java using DOM parser
You can create or write a XML file using DOM Parser. First you will create a transformer object to wire a DOMSource to a StreamResult. You will then invoke the transformer's transform() method to write out the DOM as XML data.1) Create XML file with nodes and text value:
XML file that you want to create: employees.xml
<?xml version="1.0"?> <employees> <employee> <firstname>Mohit</firstname> <lastname>Bisht</lastname> </employee> <employee> <firstname>Samit</firstname> <lastname>Ahlawat</lastname> </employee> </employees>
// Creates XML file using Java DOM parser import java.io.File; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.OutputKeys; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.Document; import org.w3c.dom.Element; public class WriteXMLDOMParser { public static void main(String[] args) { try { DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); Document doc = dBuilder.newDocument(); Element rootElement = doc.createElementNS("", "employees"); doc.appendChild(rootElement); rootElement.appendChild(createElement(doc, "Mohit", "Bisht")); rootElement.appendChild(createElement(doc, "Samit", "Ahlawat")); TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); transformer.setOutputProperty(OutputKeys.INDENT, "yes"); DOMSource source = new DOMSource(doc); StreamResult console = new StreamResult(System.out); StreamResult file = new StreamResult(new File("E:\\employees.xml")); transformer.transform(source, console); transformer.transform(source, file); } catch (Exception e) { e.printStackTrace(); } } private static Element createElement(Document doc, String firstname, String lastname) { Element employee = doc.createElement("Employee"); Element node1 = doc.createElement("firstname"); node1.appendChild(doc.createTextNode(firstname)); employee.appendChild(node1); Element node2 = doc.createElement("lastname"); node2.appendChild(doc.createTextNode(lastname)); employee.appendChild(node2); return employee; } }
Output :
<?xml version="1.0"?> <employees> <employee> <firstname>Mohit</firstname> <lastname>Bisht</lastname> </employee> <employee> <firstname>Samit</firstname> <lastname>Ahlawat</lastname> </employee> </employees>
2) Create elements with multiple attributes in XML file:
XML file that you want to create: employees.xml
<?xml version="1.0"?> <employees> <employee department="hr", id="123"> <firstname>Mohit</firstname> <lastname>Bisht</lastname> </employee> <employee department="finance" id="456"> <firstname>Samit</firstname> <lastname>Ahlawat</lastname> </employee> </employees>
import java.io.File; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.OutputKeys; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.Document; import org.w3c.dom.Element; public class WriteXMLDOMParser { public static void main(String[] args) { try { DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); Document doc = dBuilder.newDocument(); Element rootElement = doc.createElementNS("", "employees"); doc.appendChild(rootElement); rootElement.appendChild(createElement(doc, "123", "hr", "Mohit", "Bisht")); rootElement.appendChild(createElement(doc, "456", "finance", "Samit", "Ahlawat")); TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); transformer.setOutputProperty(OutputKeys.INDENT, "yes"); DOMSource source = new DOMSource(doc); StreamResult console = new StreamResult(System.out); StreamResult file = new StreamResult(new File("E:\\employees.xml")); transformer.transform(source, console); transformer.transform(source, file); } catch (Exception e) { e.printStackTrace(); } } private static Element createElement(Document doc, String id, String department, String firstname, String lastname) { Element employee = doc.createElement("employee"); employee.setAttribute("id", id); employee.setAttribute("department", department); Element node1 = doc.createElement("firstname"); node1.appendChild(doc.createTextNode(firstname)); employee.appendChild(node1); Element node2 = doc.createElement("lastname"); node2.appendChild(doc.createTextNode(lastname)); employee.appendChild(node2); return employee; } }
Output :
<?xml version="1.0"?> <employees> <employee department="hr" id="123"> <firstname>Mohit</firstname> <lastname>Bisht</lastname> </employee> <employee department="finance" id="456"> <firstname>Samit</firstname> <lastname>Ahlawat</lastname> </employee> </employees>
References:
https://docs.oracle.com/javase/tutorial/jaxp/xslt/writingDom.html